1.SpringMVC的表单标签可以实现将模型数据中的属性和HTML表单元素相绑定,以实现表单数据更便捷编辑和表单值的回显示。
2.通过Form的modelAttribute属性来指定绑定的模型属性,若没有指定该属性,则默认从reqeust域对象中读取command的表单bean,若该属性值不存在,则会报错。
3.<form:input/>,<form:select/>等用来提交数据,SpringMVC中可以指定以下属性:
-path:表单字段,对应html元素的name属性,支持级联属性
-htmlEscape:是否对表单值的HTML特殊字符进行转换。默认为true
-cssClass:表单组件对应的css名
-cssErrorClass:表单组件数据存在错误时,采取的css样式。
4.<form:radiobutton>单选框组件标签,当表单bean对应的属性值和value值相等时,当选矿被选中。
<form:radiobuttons>单选框组标签,用于构造多个单选框
-items:可以是一个List、String[] Map
-itemValue:指定Radio的value值,可以是集合中bean的一个属性值。
-itemLabel 指定radio的label值
-delimiter:多个单选框可以通过delimiter指定分隔符
其他的多选:form:checkbox checkboxs,select, option等大多和radiobuttons的使用方法相同。
5.form:errors显示表单数据校验所对应的错误
<form:errors path="*"/>显示表单所有的错误
<form:errors path="user*"/>显示user前缀的所有错误
<form:errors path="username"/>显示username的错误。
以下为代码举例:
form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Map,java.util.HashMap" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Map<Integer, String>ages =new HashMap<Integer, String>();
ages.put(20, "年轻人");
ages.put(40, "中年人");
request.setAttribute("ages", ages);
%>
<!-- 也可以不定义 modelAttribute 使用默认的command属性 -->
<form:form method="POST" action="/spring/test" modelAttribute="person">
ID:<form:input path="id"/><br>
Name:<form:input path="name"/><br>
Age:<form:radiobuttons path="age" items="${ages }" /><br>
<input type="submit" value="submit">
</form:form>
</body>
</html>
TestController.java
package spring;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class TestController {
@RequestMapping(value="/test", method=RequestMethod.GET)
public String testGet(Map<String, Object>map){
Person person = new Person();
map.put("person", person);
return "form";
}
@RequestMapping(value="/test", method=RequestMethod.POST)
public String testPost(Person person){
System.out.println(person);
return "success";
}
}
<完>