11. SpringMVC表单标签库

声明表单标签库

在使用SpringMVC的时候,我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容。我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下命令:

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

【注】 ModelMap是用向控制器方法传入RedirectAttributeModel参数时,给该参数增加自定义数据时,自定义数据就保存在ModelMap中,该map最终会在SpringServlet中被写入HttpRespone对象,然后这个map被删除。具体参加RedirectAttribute的实现。

表单标签<form:form/>

使用SpringMVC的form标签主要有两个作用,第一是它会自动的绑定来自Model中的一个属性值到当前form对应的实体对象,默认是command属性,这样我们就可以在from表单体里面方便的使用该对象的属性。第二是它支持我们在提交表单的时候使用除GETPOST之外的其他方法进行提交,比如DELETEPUT

<form:form action="formTag/form.do" method="post" modelAttribute="tbUser">
	<table>
		<tr>
			<td>Name:</td>
			<td><form:input path="name"/></td>
		</tr>
		<tr>
			<td>Age:</td>
			<td><form:input path="age"/></td>
		</tr>
		<tr>
			<td colspan="2">
				<input type="submit" value="提交"/>
			</td>
		</tr>
	</table>
</form:form>

参数:

  • action 和普通HTML表单相同
  • method 和普通HTML表单相同,但支持更多操作
  • modelAttribute 打开表单页面时传入model对象的自定义对象,如果没有,默认就是名称为"command"对应的对象,这里是名称为"tbUser"对应的自定义对象。有了该对象,就可以在下面的表单标签中直接映射paht属性到对象属性,来填充HTML表单元素的value属性。
  • path 即modelAttribute中对象的属性名

文本框<from:input/>

使用<form:input path="name"/>标签来渲染一个HTML文本框,等同于:

<input id="name" name="name" type="text" value="" />

密码框<form:password/>

使用<from:password path="pwd"/>标签来渲染一个HTML密码框,等同于:

<input id="pwd" name="pwd" type="password" value=""/>

文本域<form:textarea/>

使用<form:textarea path="address" rows="5" cols="30" />标签来渲染一个HTML文本域,等同于:

<textarea id="address" name="address" rows="5" cols="30"/>

复选框<from:checkbox/>

使用<form:checkbox items="${userListObj}" path="itemBaseName" />标签来渲染一个单独的HTML复选框

  • 情形1:<form:checkbox path="testBoolean"/>,如果对象属性testBooleantrue,等同于:
<input id="testBoolean" name="testBoolean" checked="checked"/>
  • 情形2:<form:checkbox path="testArray" value="arrayItem 路人甲"/>,如果对象属性testArray是数组、List或Set类型的数据,则如果绑定的数据中有和checkbox的属性value相同的值,则为选定状态,假设testArray有值是arrayItem 路人丙,等同于:
<form:checkbox path="testArray" value="arrayItem 路人甲"/>
<form:checkbox path="testArray" value="arrayItem 路人乙"/>
<form:checkbox path="testArray" value="arrayItem 路人丙"/>
<form:checkbox path="testArray" value="arrayItem 路人丁"/>

==》

<input id="testArray1" name="testArray" type="checkbox" value="arrayItem 路人甲" />
<input id="testArray2" name="testArray" type="checkbox" value="arrayItem 路人乙" />
<input id="testArray3" name="testArray" type="checkbox" value="arrayItem 路人丙" checked="checked"/>
<input id="testArray4" name="testArray" type="checkbox" value="arrayItem 路人丁" />

复选框(多选)<form:checkboxes/>

属性:

  • items:指定复选框组显示哪些选项。该属性值可以是另一个model中传入的对象或对象属性,只要是一个List、String[]、或Map。如果path中的值在items中出现,则对应的复选框被选中。
    使用<form:checkboxes items="${otherValues}" path="itemBaseName" />标签来渲染一组HTML多选复选框,等同于:
<span>
	<input id="itemBaseName1" name="itemBaseName" type="checkbox" value="Spring MVC" checked="checked" />
	<label for="itemBaseName1">Spring MVC</label>
</span>
<span>
	<input id="itemBaseName2" name="itemBaseName" type="checkbox" value="Spring MVC" />
	<label for="itemBaseName1">Struct 2</label>
</span>
<span>
	<input id="itemBaseName3" name="itemBaseName" type="checkbox" value="Spring MVC" checked="checked" />
	<label for="itemBaseName1">Spring boot</label>
</span>
<span>
	<input id="itemBaseName4" name="itemBaseName" type="checkbox" value="Spring MVC" />
	<label for="itemBaseName1">Spring Cloud</label>
</span>

单选按钮<form:radiobutton/>

使用<form:radiobutton />标签来渲染一个HTML单选按钮,如果value的值和对象属性的值相同,就会被选中,等同于:

<form:radiobutton path="gender" value="M" label=""/>
<form:radiobutton path="gender" value="F" label="nv"/>

==》

<input id="gender1" name="gender" type="radio" value="M" checked="checked"/>
<label for="gender1"></label>
<input id="gender2" name="gender" type="radio" value="F">
<label for="gender2"></label>

单选按钮(多选)<form:radiobuttons/>

注意:所有有多选功能的控件参数都和这里相同
属性:

  • items:可以是一个List、String[]、或Map
  • itemValue:指定radio的value值,如果要显示的对象属性是一个类对象,则可以指定该类对象的哪个属性作为value
  • itemLabel:指定vadio的label值,同上,指定类对象的属性作为label
  • delimiter :多个单选框可以通过delimiter指定分隔符
    使用<form:radiobuttons items="${userListObj}" path="itemBaseName" />标签来渲染一个HTML多选复选框,等同于:
<span>
	<input id="itemBaseName1" name="itemBaseName" type="radio" value="Spring MVC" />
	<label for="itemBaseName1">Spring MVC</label>
</span>
<span>
	<input id="itemBaseName2" name="itemBaseName" type="radio" value="Struct 2" />
	<label for="itemBaseName1">Struct 2</label>
</span>
<span>
	<input id="itemBaseName3" name="itemBaseName" type="radio" value="Spring boot" />
	<label for="itemBaseName1">Spring boot</label>
</span>
<span>
	<input id="itemBaseName4" name="itemBaseName" type="radio" value="Spring Cloud" />
	<label for="itemBaseName1">Spring Cloud</label>
</span>

假设自定义对象有一个属性是List<BaseResult>,该类BaseResult有两个属性值statusmessage
控制器传入值:

ArrayList<BaseResultTest> results = new ArrayList<>();
results.add(new BaseResultTest(200, "OK"));
results.add(new BaseResultTest(500, "Failed"));
MyFormTest tbUser = new MyFormTest();
tbUser.setResults(results);
model.addAttribute("tbUser", tbUser);

界面布局:

<form:radiobuttons path="results" items="${tbUser.results}" itemValue="message" itemLabel="status"/>

等同于:

<span>
	<input id="results1" name="results" type="radio" value="OK" checked="checked">
	<label for="results1">200</label>
</span>
<span>
	<input id="results2" name="results" type="radio" value="Failed" checked="checked">
	<label for="results2">500</label>
</span>

下拉列表

使用 <form:select />, <form:option />,<form:options /> 标签来渲染一个 HTML 下拉列表
Controller中赋值:

String[] strs = {"Spring", "SpringMVC", "SpringBoot"};
tbUser.setFrameworks(strs);
model.addAttribute("tbUser", tbUser);

from中设置:

<form:select path="frameworks" items="${checks}" >
	<option>请选择</option>
	<form:options items="${tbUser.frameworks}"/>
</form:select>

等同于:

<select id="frameworks" name="frameworks" multiple="multiple">
	<option value="SpringMVC" selected="selected">SpringMVC</option>
	<option value="Hibernate">Hibernate</option>
	<option value="Struts2">Struts2</option>
</select>

注意:

  • 如果path对应的属性是一个List、数组、Map,那么渲染后的select是一个列表页,如果path的值一个单独值(比如一个字符串,一个数字),那么渲染后的select就是下拉列表。
  • 可以在<form:select></form:select>中间插入选项。或或from:options
    • 插入option:如果path是一个List、数组、Map,那么该标签被忽略,否则会添加到选项中
    • 插入from:options:如果path是一个独立值,而该值和在from:optionsvalue属性相同,则下拉列表默认选中该项
    • 插入from:options:渲染一系列普通option,规则和form:select相同

下拉列表(多选)

使用 <form:select /> 标签及其属性 multiple=true 来渲染一个 HTML 多选下拉列表,等同于:

<form:select path="skills" items="${skillsList}" multiple="true" />

==》

<select id="skills" name="skills" multiple="multiple">
   <option value="Struts">Struts</option>
   <option value="Hibernate">Hibernate</option>
   <option value="Apache Wicket">Apache Hadoop</option>
   <option value="Spring">Spring</option>
</select>

隐藏字段域

使用 <form:hidden path=“id” value=“1000”/> 标签来渲染一个 HTML 隐藏字段域,等同于:

<input id="id" name="id" type="hidden" value="1000"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值