本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图上展示WebModel中的数据更加轻松。

一.首先我们先做一个简单了例子来对Spring MVC表单表单标签的使用有一个大致的印象,然后再结合例子对各个标签介绍一下如何使用。

1.首先,在com.demo.web.models包中添加一个模型TagsModel内容如下:

  1. package com.demo.web.models;
  2. import java.util.List;
  3. import java.util.Map;
  4. public class TagsModel{
  5. private String username;
  6. private String password;
  7. private boolean testBoolean;
  8. private String[] selectArray;
  9. private String[] testArray;
  10. private Integer radiobuttonId;
  11. private Integer selectId;
  12. private List<Integer> selectIds;
  13. private Map<Integer,String> testMap;
  14. private String remark;
  15. public void setUsername(String username){
  16. this.username=username;
  17. }
  18. public void setPassword(String password){
  19. this.password=password;
  20. }
  21. public void setTestBoolean(boolean testBoolean){
  22. this.testBoolean=testBoolean;
  23. }
  24. public void setSelectArray(String[] selectArray){
  25. this.selectArray=selectArray;
  26. }
  27. public void setTestArray(String[] testArray){
  28. this.testArray=testArray;
  29. }
  30. public void setRadiobuttonId(Integer radiobuttonId){
  31. this.radiobuttonId=radiobuttonId;
  32. }
  33. public void setSelectId(Integer selectId){
  34. this.selectId=selectId;
  35. }
  36. public void setSelectIds(List<Integer> selectIds){
  37. this.selectIds=selectIds;
  38. }
  39. public void setTestMap(Map<Integer,String> testMap){
  40. this.testMap=testMap;
  41. }
  42. public void setRemark(String remark){
  43. this.remark=remark;
  44. }
  45. public String getUsername(){
  46. return this.username;
  47. }
  48. public String getPassword(){
  49. return this.password;
  50. }
  51. public boolean getTestBoolean(){
  52. return this.testBoolean;
  53. }
  54. public String[] getSelectArray(){
  55. return this.selectArray;
  56. }
  57. public String[] getTestArray(){
  58. return this.testArray;
  59. }
  60. public Integer getRadiobuttonId(){
  61. return this.radiobuttonId;
  62. }
  63. public Integer getSelectId(){
  64. return this.selectId;
  65. }
  66. public List<Integer> getSelectIds(){
  67. return this.selectIds;
  68. }
  69. public Map<Integer,String> getTestMap(){
  70. return this.testMap;
  71. }
  72. public String getRemark(){
  73. return this.remark;
  74. }
  75. }

2.其次,在包com.demo.web.controllers添加一个TagsController内容如下:

  1. package com.demo.web.controllers;
  2. import java.util.Arrays;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.ui.Model;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RequestMethod;
  9. import com.demo.web.models.TagsModel;
  10. @Controller
  11. @RequestMapping(value = "/tags")
  12. public class TagsController {
  13. @RequestMapping(value="/test", method = {RequestMethod.GET})
  14. public String test(Model model){
  15. if(!model.containsAttribute("contentModel")){
  16. TagsModel tagsModel=new TagsModel();
  17. tagsModel.setUsername("aaa");
  18. tagsModel.setPassword("bbb");
  19. tagsModel.setTestBoolean(true);
  20. tagsModel.setSelectArray(new String[] {"arrayItem 路人甲"});
  21. tagsModel.setTestArray(new String[] {"arrayItem 路人甲","arrayItem 路人乙","arrayItem 路人丙"});
  22. tagsModel.setRadiobuttonId(1);
  23. tagsModel.setSelectId(2);
  24. tagsModel.setSelectIds(Arrays.asList(1,2));
  25. Map<Integer,String> map=new HashMap<Integer,String>();
  26. map.put(1, "mapItem 路人甲");
  27. map.put(2, "mapItem 路人乙");
  28. map.put(3, "mapItem 路人丙");
  29. tagsModel.setTestMap(map);
  30. tagsModel.setRemark("备注...");
  31. model.addAttribute("contentModel", tagsModel);
  32. }
  33. return "tagstest";
  34. }
  35. }

3.最后,在views文件夹下添加视图tagstest.jsp内容如下:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>Insert title here</title>
  9. </head>
  10. <body>
  11. <form:form modelAttribute="contentModel" method="post">
  12. input 标签:<form:input path="username"/><br/>
  13. password 标签:<form:password path="password"/><br/>
  14. 绑定boolean的checkbox 标签:<br/>
  15. <form:checkbox path="testBoolean"/><br/>
  16. 绑定Array的checkbox 标签:<br/>
  17. <form:checkbox path="testArray" value="arrayItem 路人甲"/>arrayItem 路人甲
  18. <form:checkbox path="testArray" value="arrayItem 路人乙"/>arrayItem 路人乙
  19. <form:checkbox path="testArray" value="arrayItem 路人丙"/>arrayItem 路人丙
  20. <form:checkbox path="testArray" value="arrayItem 路人丁"/>arrayItem 路人丁<br/>
  21. 绑定Array的checkboxs 标签:<br/>
  22. <form:checkboxes path="selectArray" items="${contentModel.testArray}"/><br/>
  23. 绑定Map的checkboxs 标签:<br/>
  24. <form:checkboxes path="selectIds" items="${contentModel.testMap}"/><br/>
  25. 绑定Integer的radiobutton 标签:<br/>
  26. <form:radiobutton path="radiobuttonId" value="0"/>0
  27. <form:radiobutton path="radiobuttonId" value="1"/>1
  28. <form:radiobutton path="radiobuttonId" value="2"/>2<br/>
  29. 绑定Map的radiobuttons 标签:<br/>
  30. <form:radiobuttons path="selectId" items="${contentModel.testMap}"/><br/>
  31. 绑定Map的select 标签:<br/>
  32. <form:select path="selectId" items="${contentModel.testMap}"/><br/>
  33. 不绑定items数据直接在form:option添加的select 标签:<br/>
  34. <form:select path="selectId">
  35. <option>请选择人员</option>
  36. <form:option value="1">路人甲</form:option>
  37. <form:option value="2">路人乙</form:option>
  38. <form:option value="3">路人丙</form:option>
  39. </form:select><br/>
  40. 不绑定items数据直接在html的option添加的select 标签:<br/>
  41. <form:select path="selectId">
  42. <option>请选择人员</option>
  43. <option value="1">路人甲</option>
  44. <option value="2">路人乙</option>
  45. <option value="3">路人丙</option>
  46. </form:select><br/>
  47. 用form:option绑定items的select 标签:<br/>
  48. <form:select path="selectId">
  49. <option/>请选择人员
  50. <form:options items="${contentModel.testMap}"/>
  51. </form:select><br/>
  52. textarea 标签:
  53. <form:textarea path="remark"/><br/>
  54. <input type="submit" value="Submit" />
  55. </form:form>
  56. </body>
  57. </html>

4.运行测试:

二.下面我们来介绍各个标签的使用方法。 
1.要使用Spring MVC提供的表单标签,首先需要在视图页面添加:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

2.form标签:

<form:form modelAttribute="contentModel" method="post">

modelAttribute属性指定该form绑定的是哪个Model,当指定了对应的Model后就可以在form标签内部其它表单标签上通过为path指定Model属性的名称来绑定Model中的数据了,method属性指定form的提交方式如GET、POST等。

3.input标签:

<form:input path="username"/>

会生成一个type为text的Html input标签,通过path属性来指定要绑定的Model中的值。

4.password标签:

<form:password path="password"/>

会生成一个type为password的Html input标签,通过path属性来指定要绑定的Model中的值。

5.checkbox标签:

会生成一个type为checkbox的Html input标签,支持绑定boolean、数组、List或Set类型的数据。

绑定boolean数据会生成一个复选框,当boolean为true该复选框为选定状态,false为不选定状态。

<form:checkbox path="testBoolean"/>

绑定数组、List或Set类型的数据(以数组作为演示)如果绑定的数据中有对应checkbox指定的value时则为选定状态,反之为不选定状态:

  1. 绑定Arraycheckbox 标签:<br/>
  2. <form:checkbox path="testArray" value="arrayItem 路人甲"/>arrayItem 路人甲
  3. <form:checkbox path="testArray" value="arrayItem 路人乙"/>arrayItem 路人乙
  4. <form:checkbox path="testArray" value="arrayItem 路人丙"/>arrayItem 路人丙
  5. <form:checkbox path="testArray" value="arrayItem 路人丁"/>arrayItem 路人丁

6.checkboxs标签:

会根据绑定的items数据生成一组对应的type为checkbox的Html input标签,绑定的数据可以是数组、集合或Map,其中checkboxs的path属性也必指定,当path中的数据有和items中的数据值同的时候对应的checkbox为选定状态,反之为不选定状态。

绑定集合数据(以数组作为演示):

  1. 绑定Arraycheckboxs 标签:<br/>
  2. <form:checkboxes path="selectArray" items="${contentModel.testArray}"/>

这里需要注意的是当使用EL表达式绑定时需要连Model的名称一起指定如${contentModel.testArray}而不能像path一样只指定Model对应的属性名称。

但通常情况下我们需要的是checkbox显示的是名称,但选择后提交的是对应名称的值,比如id,我们就可以通过绑定Map来实现这个功能:

  1. 绑定Mapcheckboxs 标签:<br/>
  2. <form:checkboxes path="selectIds" items="${contentModel.testMap}"/>

生成的一组checkbox中其中一个checkbox的html代码:

  1. <span><input id="selectIds1" name="selectIds" type="checkbox" value="1" checked="checked"/><label for="selectIds1">mapItem 路人甲</label></span>

7.radiobutton标签:

会生成一个type为radio的Html input标签,如果绑定的数据的值对应radiobutton指定的value时则为选定状态,反之为不选定状态:

  1. 绑定Integerradiobutton 标签:<br/>
  2. <form:radiobutton path="radiobuttonId" value="0"/>0
  3. <form:radiobutton path="radiobuttonId" value="1"/>1
  4. <form:radiobutton path="radiobuttonId" value="2"/>2

8.radiobuttons标签:

会根据绑定的items数据生成一组对应的type为radio的Html input标签,绑定的items数据可以是数组、集合或Map,其中radiobuttons的path属性也必指定,当path的值和items中的某条数据值相同的时候对应的radio为选定状态,反之为不选定状态,用法和checkboxs很相似。但要注意的是:checkboxs的path绑定的是集合radiobuttons的path绑定的是单个值:

  1. 绑定Mapradiobuttons 标签:<br/>
  2. <form:radiobuttons path="selectId" items="${contentModel.testMap}"/>

9.select标签:

会生成一个Html select标签,绑定的items数据可以是数组、集合或Map会根据items的内容生成select里面的option选项,当path的值和items中的某条数据值相同的时候对应的option为选定状态,反之为不选定状态,用法与radiobuttons很相似:

  1. 绑定Mapselect 标签:<br/>
  2. <form:select path="selectId" items="${contentModel.testMap}"/>

上面的是根据指定的items自动生成的option选项,但我们也可以不指定items手动添加select的option选项:

  1. 不绑定items数据直接在form:option添加的select 标签:<br/>
  2. <form:select path="selectId">
  3. <option>请选择人员</option>
  4. <form:option value="1">路人甲</form:option>
  5. <form:option value="2">路人乙</form:option>
  6. <form:option value="3">路人丙</form:option>
  7. </form:select>

其中添加<option>请选择人员</option> 可以让在没有进行选择的情况下不指定任何默认值。

下面看一下form:option 与option的区别:

  1. 不绑定items数据直接在form:option添加的select 标签:<br/>
  2. <form:select path="selectId">
  3. <option>请选择人员</option>
  4. <form:option value="1">路人甲</form:option>
  5. <form:option value="2">路人乙</form:option>
  6. <form:option value="3">路人丙</form:option>
  7. </form:select><br/>
  8. 不绑定items数据直接在htmloption添加的select 标签:<br/>
  9. <form:select path="selectId">
  10. <option>请选择人员</option>
  11. <option value="1">路人甲</option>
  12. <option value="2">路人乙</option>
  13. <option value="3">路人丙</option>
  14. </form:select><br/>

由截图的结果可以看出form:option 正确选择了path中指定的selectId而option没有,说明form:option有数据绑定功能option没有。

另外我们也可以不为select指定items,而把items指定到form:option 上这两种效果基本是一样的,一点区别就是为select指定items再在select里面添加option是不起作用的会被items生成的option覆盖掉,而把items指定到form:option 上则可以再在select里面添加option:

  1. form:option绑定itemsselect 标签:<br/>
  2. <form:select path="selectId">
  3. <option/>请选择人员
  4. <form:options items="${contentModel.testMap}"/>
  5. </form:select>

10.textarea标签:

  1. textarea 标签:
  2. <form:textarea path="remark"/>

会生成一个Html textarea标签,通过path属性来指定要绑定的Model中的值。

11.hidden标签:

会生成一个type为hidden的Html input标签,通过path属性来指定要绑定的Model中的值。

12.errors标签:

errors标签的用法在系列(6)—>数据验证中已经说明了,这里不在赘述。

Spring MVC表单标签的内容到此结束。

代码下载:http://pan.baidu.com/s/1gdyzY3D

http://www.cnblogs.com/liukemng/p/3754211.html

SpringMVC学习(11):表单标签的更多相关文章

  1. SpringMVC学习系列- 表单验证

    本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图上展示WebModel中的数据更加轻松. 一.首先我们先做一个简单了例子来对Spring MV ...

  2. [转]SpringMVC<from:form>表单标签和<input>表单标签简介

    原文地址:https://blog.csdn.net/hp_yangpeng/article/details/51906654 在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标 ...

  3. 第七节 认识SpringMVC中的表单标签

    所谓成熟,就是:你要习惯,任何人的忽冷忽热:也要看淡,任何人的渐行渐远: --胖先生 SpringMVC的表单标签 回顾: JSTL标签 --C标签 FMT标签 自学:JSP如何自定义标签[开源社区当 ...

  4. SpringMVC:学习笔记(5)——数据绑定及表单标签

    SpringMVC——数据绑定及表单标签 理解数据绑定 为什么要使用数据绑定 基于HTTP特性,所有的用户输入的请求参数类型都是String,比如下面表单: 按照我们以往所学,如果要获取请求的所有参数 ...

  5. SpringMVC学习系列(11) 之 表单标签

    本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图上展示WebModel中的数据更加轻松. 一.首先我们先做一个简单了例子来对Spring MV ...

  6. SpringMVC学习系列 之 表单标签

    http://www.cnblogs.com/liukemng/p/3754211.html 本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图 ...

  7. SpringMVC学习记录(五)--表单标签

    在使用SpringMVC的时候我们能够使用Spring封装的一系列表单标签,这些标签都能够訪问到ModelMap中的内容. 以下将对这些标签一一介绍. 1.引入标签头文件 在正式介绍SpringMVC ...

  8. SpringMVC(11)表单标签

    本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图上展示WebModel中的数据更加轻松. 一.首先我们先做一个简单了例子来对Spring MV ...

  9. 学习SpringMVC必知必会(7)~springmvc的数据校验、表单标签、文件上传和下载

    输入校验是 Web 开发任务之一,在 SpringMVC 中有两种方式可以实现,分别是使用 Spring 自带的验证 框架和使用 JSR 303 实现, 也称之为 spring-validator 和 ...

随机推荐

  1. SCM

    scm即软件配置管理. 软件配置管理(SCM)是指通过执行版本控制.变更控制的规程,以及使用合适的配置管理软件,来保证所有配置项的完整性和可跟踪性,配置管理是对工作成果的一种有效保护. SCM(Sof ...

  2. Zen Coding – 超快地写网页代码(注:已更名为Emmet)

    这篇博客能帮助快速上手这款插件,极大地提高开发效率废话不多说直接上例子 zen codeing的缩写规则 E 元素名 (div, p); 实例:(输入完<按快捷键ctrl+E>就会显示) ...

  3. MySQL执行外部sql脚本文件命令报错:unknown command '\'

    由于编码不一致导致的 虽然大部分导出是没有问题的 但是数据表中存储包含一些脚本(富文本内容)会出现该问题,强制指定编码即可解决. mysql导入时指定编码: mysql -u root -p --de ...

  4. leetcode-15双周赛-1289-下降路径最小和

    题目描述: 方法一:动态规划 O(N^3) class Solution: def minFallingPathSum(self, arr: List[List[int]]) -> int: n ...

  5. 【锁】MySQL和Oracle行锁比较

    InnoDB INNODB表是索引组织的表,主键是聚集索引,非主键索引都包含主键信息. INNODB默认是行锁. INNODB行锁是通过给索引项加锁来实现的,即只有通过索引条件检索数据,InnoDB才 ...

  6. Fmx在android下InputBox输入框点击Cancel取消按钮后报异常

    在网上搜索半天也没有找到相关信息,估计遇到这个问题的相当少, 解决办法: 找到FMX.Dialogs.Android.pas, 将121行中  FValues[I] := FDefaultValues ...

  7. mybatis源码分析之01环境搭建

    直接使用maven搭建一个mybatis的运行环境 1. pom.xml <?xml version="1.0" encoding="UTF-8"?> ...

  8. SpringMvc Filter的使用

    一:Filter过滤器. 先自定义一个过滤器. package com.jbj.filter; import org.springframework.web.filter.OncePerRequest ...

  9. SQL_2008安装教程(完整版)

    Win 7 win xp系统中SQL2008安装注意事项一:SQL2008 镜像下载地址 http://download.microsoft.com/download/4/C/4/4C402E48-0 ...

  10. 2019.6.1 模拟赛——[ 费用流 ][ 数位DP ][ 计算几何 ]

    第一题:http://codeforces.com/contest/1061/problem/E 把点集分成不相交的,然后跑费用流即可.然而错了一个点. #include<cstdio> ...