数据绑定是将用户输入绑定到领域模型的一种特性。有了数据绑定,类型总是为String的HTTP请求参数,可用于填充不同类型的对象属性。
1.数据绑定概览
基于HTTP的特性,所有HTTP请求参数的类型均为字符串。
有了数据绑定,就不再需要ProductForm类,也不需要解析Product对象的price属性。
@RequestMapping(value="product_save")
public String saveProduct(Product product, Model model)
数据绑定的另一个好处是:当输入验证失败时,它会重新生成一个HTML表单。手工编写HTML代码时,必须记着用户之前输入的值,重新填充输入字段。有了Spring的数据绑定和表单标签库后,它们就会替你完成这些工作。
2.表单标签库
表单标签库包含了可以用在JSP页面中渲染HTML元素的标签。为了使用这些标签,必须在JSP页面的开头处声明这个taglib指令。
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
(1)表单标签
commandName属性或许是其中最重要的属性,因为它定义了模型属性的名称,其中包含了一个backing object,其属性将用于填充所生成的表单。如果该属性存在,则必须在返回包含该表单的视图的请求处理方法中添加相应的模型属性。
BookAddForm.jsp
"book" action="book_save" method="post">
...
BookController类中的inputBook方法,是返回BookAddForm.jsp的请求处理方法。
@RequestMapping(value = "/book_input")
public String inputBook(Model model) {
...
model.addAttribute("book", new Book());
return "BookAddForm";
}
此处用book属性创建了一个Book对象,并添加到Model。如果没有Model属性,BookAndForm.jsp页面就会抛出异常,因为表单标签无法找到在其commandName属性中指定的form backing object。
(2)input标签
input标签渲染元素。这个标签最重要的属性是path,它将这个输入字段绑定到form backing object的一个属性。
input标签也可以绑定到嵌套对象的属性。
(3)password标签
password标签渲染元素。password标签与input标签相似,只不过它有一个showPassword属性(表示应该显示或遮盖密码)。
(4)hidden标签
hidden标签渲染元素。
(5)textarea标签
textarea基本上就是一个支持多行输入的input元素。
(6)checkbox标签
checkbox标签渲染元素。
(7)radiobutton标签
radiobutton标签渲染元素。
Computing Now <form:radiobutton path="newsletter" value="Computing Now"/><br/>
Modern Health <form:radiobutton path="newsletter" value="Modern Health"/>
(8)checkboxes标签
checkboxes标签渲染多个元素。
"category" items="${categoryList}"/>
(9)radiobuttons标签
radiobuttons标签渲染多个元素。
"category" items="${categoryList}"/>
每次只能选择一个单选按钮。
(10)select标签
select标签渲染一个HTML的select元素。被渲染元素的选项可能来自赋予其items属性的一个Collection、Map、Array,或者来自一个嵌套的option或者options标签。
select id="category" path="category.id" items="${categories}"
itemLabel="name" itemValue="id" />
(11)option标签
select id="category" path="category.id" items="${categories}"
itemLabel="name" itemValue="id">
<option value="0">---Please select---option>
select>
(12)options标签
(13)errors标签
error标签渲染一个或者多个HTML的span元素,每个span元素中都包含一个字段错误。这个标签可以用于显示一个特定的字段错误,或者所有字段错误。
<form:errors path="*"/>
<form:errors path="author"/>