通过SpringMVC的表单标签可以实现将模型数据中的属性和HTML表单元素相绑定,以实现表单数据更便捷编辑和表单值的回显。
SpringMVC提供了form 标签,一般情况下,通过 GET 请求获取表单页面,而通过 POST 请求提交表单页面,因此获取表单页面和提交表单页面的 URL 是相同的。只要满足该最佳条件的契约,form:form 标签就无需通过 action 属性指定表单提交的 URL。
准备了一个Book的bean,其属性为bookName、author、price
表单标签的使用
1、在jsp页面导入form标签的taglib
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
2.在index.jsp页面中使用form标签
<!-- modelAttribute="":
1)、默认情况下我们表单标签会从请求域中获取一个command对象;把这个对象中的每一个属性对应的显示出来
2)、可以告诉SpringMVC不要去取command的值了,我放了一个modelAttribute指定的值;
取对象用的key就用我modelAttribute指定的; -->
<form:form action="test" method="post" modelAttribute="book">
<!-- path指定的是一个属性;这个属性是从隐含模型(请求域中取出的某个对象中的属性);
path指定的每一个属性,请求域中必须有一个对象,拥有这个属性;
path就是原先表单元素中的name项:需要写
path:
1)当做原生的name项
2)自动回显隐含模型中某个对象对应的这个属性的值
-->
bookName:<form:input path="bookName"/><br/><br/>
author:<form:input path="author"/> <br/><br/>
price:<form:input path="price"/><br><br>
<input type="submit" value="submit">
</form:form>
解决在访问index.jsp页面时请求域中没有modelAttribute指定的对象
通过页面跳转的方式太到index.jsp,在controller控制器层,使用@ModelAttribute,现在请求域中放一个modelAttribute指定的对象,在跳转到index.jsp页面
代码如下:
@ModelAttribute
public void property(Model model) {
Book book = new Book("aaa","bbb",123);
model.addAttribute("book", book);
}
@RequestMapping("/toIndex")
public String toIndex() {
return "forward:index.jsp";
}
@RequestMapping("/test")
public String test() {
return "success";
}
跳转成功后页面为:
如此一来,方便了我们对数据的回显。
如果在请求域中加一个部门集合的对象,key为:deps,Department类为自定义的类,代码如下:
Collection<Department> deps = departmentDao.getDepartments();
model.addAttribute("deps",deps);
则使用SpringMVC提供的表单元素可以实现下拉框选择部门,代码如下:
department:
<!--
items="":指定要遍历的集合;自动遍历,遍历出来的每一个元素都是放进集合中的对象
itemLabel="属性名":指定遍历出来的对象的那个属性作为option标签体的值
itemValue="属性名":指定遍历出来的对象的那个属性作为要提交的value值
-->
<form:select path="department.id"
items="${deps}" itemLabel="departmentName" itemValue="id"
></form:select>
SpringMVC提供的表单标签,大致有如下:
form:input、form:password、form:hidden
form:textarea:对应 HTML 表单的 text、password、hidden、textarea 标签
form:radiobutton:单选框组件标签,当表单 bean 对应的属性值和 value 值相等时,单选框被选中
form:radiobuttons:单选框组标签,用于构造多个单选框
-items:可以是一个 List、String[] 或 Map
-itemValue:指定 radio 的 value 值。可以是集合中 bean 的一个属性值
-itemLabel:指定 radio 的 label 值
-delimiter:多个单选框可以通过 delimiter 指定分隔符
form:checkbox:复选框组件。用于构造单个复选框
form:checkboxs:用于构造多个复选框。使用方式同 form:radiobuttons 标签
form:select:用于构造下拉框组件。使用方式同 form:radiobuttons 标签
form:option:下拉框选项组件标签。使用方式同 form:radiobuttons 标签
form:errors:显示表单组件或数据校验所对应的错误
<form:errors path= “ ” /> :显示表单所有的错误
<form:errors path= “ user” /> :显示所有以 user 为前缀的属性对应的错误
<form:errors path= “ username” /> :显示特定表单对象属性的错误
这个标签在校验的博客中会使用
如上,便是SpringMVC提供的表单标签的使用,如有错误,欢迎指正。