SpringMVC表单标签

使用spring的spring-form标签,首先要在JSP中添加以下指令:

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

1、form标签

自动绑定Model中的属性值到form对应的实体对象,默认command属性,这样就可以在form表单体里使用该对象属性。

提交表单的时候可以支持多种方法提交,GET、POST、DELETE、PUT等。

form中默认的是command,如果要自定义的话可以用commandName或是modelAttribute属性。

<form:form action="formTag/form.do" method="post" commandName="user">

该form的提交方法是delete,这样在后台我们就可以给对应的请求方法的RequestMapping加上method为RequestMethod.DELETE的限制。

<form:form action="formTag/form.do" method="delete" modelAttribute="user">

也可以用隐藏域来设定提交方式,但是需要在web.xml中加入下面代码。

<form id="user" action="formTag/form.do" method="post">

<input type="hidden" name="_method" value="delete"/>

如果不加web中的代码,使用的提交方式是post,所以需要加入下面一段话。

<filter>

<filter-name>hiddenHttpMethodFilter</filter-name>

<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>hiddenHttpMethodFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

手动设置请求方法隐藏域,需要指定表单请求为POST,为GET将不会生效。

如果不用“_method”,可以用methodParam属性来指定。

<form:form action="formTag/form.do" method="post" methodParam="requestMethod" modelAttribute="user">

<input type="hidden" name="requestMethod" value="head"/>

另外需要在web中配置,methodParam属性。

<init-param>

<param-name>methodParam</param-name>

<param-value>requestMethod</param-value>

</init-param>

有Multipart请求处理时HiddenHttpMethodFilter需要在Multipart处理之后执行,需从POST请求中获取参数。MultipartFilter默认寻找filterMultipartResolver的MultipartResolver进行封装。在web中添加,

<filter>

<filter-name>multipartFilter</filter-name>

<filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>

<init-param>

<param-name>multipartResolverBeanName</param-name>

<param-value>multipartResolver</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>multipartFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

2、input标签

springMVC表单标签最大的好处就是它支持数据绑定,不需要的时候就使用Html标签。

<td>Name:</td><td><form:input path="name"/></td>

3、hidden标签

hidden标签会被渲染为一个type为hidden的普通Html input标签。用法跟input标签一样,也能绑定表单数据,只是它生成的是一个隐藏域。

4、checkbox标签

绑定boolean数据,即true对应选中,false对应不选中。

<td>Male:</td><td><form:checkbox path="male"/></td>

绑定列表数据,数组、List、Set。当List列表拥有哪个属性的时候哪个就会被选中。

<form:checkbox path="roles" value="role1"/>Role1<br/>

当User拥有role1的时候对应的<form:checkbox path="roles"value="role1"/>就会为选中状态。

绑定数据为Object时,用类的toString与value值对比,如果相同的话,则为选中状态。

5、Checkboxes标签

这是一个复选框,其中有两个属性,分别是path、items。items表示当前要用来展示的项,而path所绑定的表单对象的属性,为当前表单对象拥有项。

<form:checkboxes path="roles" items="${roleList}"/>

@RequestMapping(value="form", method=RequestMethod.GET)

public String formTag(Map<String, Object> map) {

User user = new User();

List<String> roles = new ArrayList<String>();

roles.add("role1");

roles.add("role3");

user.setRoles(roles);

List<String> roleList = new ArrayList<String>();

roleList.add("role1");

roleList.add("role2");

roleList.add("role3");

map.put("user", user);

map.put("roleList", roleList);

return "formTag/form";

}

6、radiobutton标签

当sex为1的时候就代表性别为男,上面性别为男的那一行就会被选中,当sex为0的时候就代表性别为女,上面性别为女的那一行就会被选中。

<form:radiobutton path="sex" value="1"/>男

<form:radiobutton path="sex" value="0"/>女

7、radiobuttons标签

radiobuttons标签跟radiobutton标签的区别如同checkbox标签对checkboxes标签的区别。使用radiobuttons标签的时候将生成多个单选按钮。使用radiobuttons有两个属性也是我们必须指定的,一个是path属性,表示绑定的表单对象对应的属性,另一个是items属性,表示用于生成单选按钮的数据源。

<form:radiobuttons path="favoriteBall" items="${ballMap}" delimiter="&nbsp;"/>

radiobuttons的delimiter属性,该属性表示进行展示的radiobutton之间的分隔符。

8、password标签

password标签将会被渲染为一个type为password的普通HTML input标签。

9、select标签

<form:select path="favoriteBall" items="${ballMap}"/>

radiobuttons类似,但是还需要option

当items的数据类型为Map时,Map的key将作为可选项option的value,而Map的value将作为option的Label标签。

10、option标签

<form:select path="favoriteBall" items="${ballMap}">

<option>请选择</option>

<form:option value="1">篮球</form:option>

<option value="4">羽毛球</option>

</form:select>

当select标签指定了items属性的时候,它会忽略其标签体的内容,而使用items指定的内容来渲染出可选项。也就是说form:select标签的优先级高于手动添加的。

<form:select path="favoriteBall">

<option>请选择</option>

<form:option value="1">篮球</form:option>

<option value="4">羽毛球-A</option>

<form:option value="4">羽毛球-B</form:option>

</form:select>

SpringMVC option标签和普通HTML option标签的区别就在于普通HTML option标签不具备数据绑定功能,而SpringMVC option标签具有数据绑定功能,它能把当前绑定的表单对象的属性对应的值对应的option置为选中状态。

11、options标签

<form:options items="${ballMap}"/>

使用options标签的时候需要我们指定其items属性,它会根据其items属性生成一系列的普通HTML option标签。这里的items属性的可取数据类型及其对应的渲染规则跟select的items属性是一样的。

12、textarea标签

<form:textarea path="introduction" cols="20" rows="10"/>

SpringMVC textarea标签将被渲染为普通HTML textarea标签。

13、errors标签

SpringMVC errors标签是对应于SpringMVC的Errors对象的。它的作用就是用于展现Errors对象中包含的错误信息的。我们利用errors标签来展现Errors的时候是通过errors标签的path属性来绑定一个错误信息的。

UserValidator对象,专门用来对User对象进行验证:

public class UserValidator implements Validator {

public boolean supports(Class<?> clazz) {

return User.class.equals(clazz);

}

public void validate(Object target, Errors errors) {

ValidationUtils.rejectIfEmpty(errors, "name", null, "Name Is Empty");

ValidationUtils.rejectIfEmpty(errors, "username", null, "Username Is Empty.");

}

}

一个控制器类:

@Controller

@RequestMapping("formTag")

public class FormTagController {

@RequestMapping(value="form", method=RequestMethod.GET)

public String formTag(Map<String, Object> map) {

User user = new User();

map.put("user", user);

return "formTag/form";

}

@InitBinder

public void initBinder(DataBinder binder) {

binder.setValidator(new UserValidator());

}

@RequestMapping(value="form", method=RequestMethod.POST)

public String form(@Valid User user, Errors errors) {

if (errors.hasFieldErrors())

return "formTag/form";

return "formTag/submit";

}

}

控制器类中通过DataBinder对象给该类设定了一个用于验证的UserValidator,这样当我们请求该控制器的时候UserValidator将生效。

一段表单代码:

<form:form action="formTag/form.do" method="post" commandName="user">

<table border="1px" bordercolor="blue">

<tr>

<td>所有错误信息:</td>

<td><form:errors path="*"/></td>

</tr>

<tr>

<td>Name的错误信息:</td>

<td><form:errors path="name"/></td>

</tr>

<tr align="center">

<td colspan="2"><input type="submit" value="提交"/></td>

</tr>

</table>

</form:form>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值