1.form标签
一般情况下,通过 GET 请求获取表单页面,而通过POST 请求提交表单页面,因此获取表单页面和提交表单页面的 URL 是相同的。只要满足该最佳条件的契约, 标签就无需通过 action 属性指定表单提交的 URL
可以通过 modelAttribute 属性指定绑定的模型属性,若没有指定该属性,则默认从 request 域对象中读取command 的表单 bean,如果该属性值也不存在,则会发生错误。
form标签的属性
SpringMVC提供了多个表单组件标签,如、 等,用以绑定表单字段的属性值,它们的共有属性如下:
path:表单字段,对应 html 元素的 name 属性,支持级联属性
htmlEscape:是否对表单值的 HTML 特殊字符进行转换,默认值为 true
cssClass:表单组件对应的 CSS样式类名
cssErrorClass:表单组件的数据存在错误时,采取的 CSS样式
2.input标签
简单的使用案例:
registerForm.jsp
<!-- 如果不设置modelAttribute属性,会取属性名为command的对应属性值 -->
<form:form method="post" action="register" modelAttribute="user" >
姓名:<form:input path="username"/><br/>
性别:<form:input path="sex"/><br/>
年龄:<form:input path="age"/><br/>
</form:form>
User.java
public class User {
private String username;
private String sex;
private Integer age;
//...
}
UserController.java
@RequestMapping("/registerForm")
public String registerForm(Model model){
User user=new User("张三","男",20);
//model.addAttribute("command",user);
model.addAttribute("user",user);
return "registerForm";
}
3.password标签
password标签的用法跟input标签相似,也能绑定表单数据,只是它生成的是一个密码框,并且多了一个showPassword属性
<form:password path="password"/>
4.hidden标签
用法跟input相似,也能绑定表单数据,只是它生成的是一个隐藏域
<form:hidden path="id"/>
5.textarea标签
是一个支持多行输入的HTML元素
<form:textarea path="remark" rows="5" cols="20"/>
6.checkbox标签
会被渲染为一个类型为checkbox的普通HTML input标签
checkboxForm.jsp
<!-- label为被渲染的复选框的值 -->
<form:form method="post" action="checkboxForm" modelAttribute="user">
<!-- 当绑定的为数组、List、Set时,checkbox的value属性在绑定的列表数据中存在则为选中状态 -->
<form:checkbox path="courses" value="Spring" label="Spring"/>
<form:checkbox path="courses" value="SpringMVC" label="SpringMVC"/>
<form:checkbox path="courses" value="MyBatis" label="MyBatis"/>
<!-- 当绑定的是一个boolean数据时,true为选中,false为不选中 -->
<form:checkbox path="reader" value="true"/>已经阅读相关协议
</form:form>
User1.java
public class User1 {
private boolean reader;
private List<String> courses;
//...
}
UserController.java
@RequestMapping(value = "/checkboxForm",method = RequestMethod.GET)
public String checkboxForm(Model model){
User1 user=new User1();
//设置boolean变量reader的值为true,页面的checkbox复选框会被选中
user.setReader(true);
//为集合变量courses添加属性,页面对应的会被选中
List<String> courses=new ArrayList<>();
courses.add("SpringMVC");
courses.add("MyBatis");
user.setCourses(courses);
model.addAttribute("user",user);
return "checkboxForm";
}
7.checkboxes标签
Department.java
//之后的页面使用id作为value,name作为label
public class Departement {
private Integer id;
private String name;
}
Employee.java
public class Employee {
private List<Departement> depts;
}
UserController.java
@RequestMapping(value = "/checkboxForm2",method = RequestMethod.GET)
public String checkboxesForm(Model model){
Employee employee=new Employee();
Departement departement=new Departement(1,"开发部");
List<Departement> list=new ArrayList<>();
list.add(departement);
employee.setDepts(list);
//页面展现的可供选择的复选框内容deptList
List<Departement> deptList=new ArrayList<>();
deptList.add(departement);
deptList.add(new Departement(2,"销售部"));
deptList.add(new Departement(3,"财务部"));
model.addAttribute("employee",employee);
model.addAttribute("deptList",deptList);
return "checkboxForm2";
}
checkboxForm2.jsp
<form:form modelAttribute="employee" method="post" action="checkboxForm2">
<form:checkboxes path="depts" items="${deptList}" itemLabel="name" itemValue="id"/>
</form:form>
8.radiobutton标签
会被渲染为一个类型为radio的普通HTML input标签
StudentController.java
@RequestMapping(value = "/radiobuttonFrom",method = RequestMethod.GET)
public String radiobuttonForm(Model model){
Student s=new Student("男");
model.addAttribute("student",s);
return "radiobuttonForm";
}
Student.java
public class Student {
private String sex;
}
radiobuttonForm.jsp
<form:form action="radiobuttionForm" method="post" modelAttribute="student">
<form:radiobutton path="sex" value="男"/>男<br/>
<form:radiobutton path="sex" value="女"/>女
</form:form>
9.select、option、options标签
public class User {
//部门编号
private Integer deptId;
}
UserController.java
@RequestMapping(value = "/selectForm",method = RequestMethod.GET)
public String selectForm(Model model){
User user=new User(2);
model.addAttribute("user",user);
//页面展现的可供选择的select下拉框内容
Map<Integer,String> deptMap=new HashMap();
deptMap.put(1,"开发部");
deptMap.put(2,"销售部");
deptMap.put(3,"财务部");
model.addAttribute("deptMap",deptMap);
return "selectForm";
}
selectForm.jsp
<form:form modelAttribute="user" method="post" action="selectForm">
<!-- items属性可以自动加载后台传递过来的数据 -->
<%--部门:<form:select path="deptId" items="${deptMap}"></form:select>--%>
<!-- 若没有自动加载,可以使用option属性手动添加 -->
部门:<form:select path="deptId">
<form:option value="1">开发部</form:option>
<form:option value="2">财务部</form:option>
<form:option value="3">销售部</form:option>
</form:select>
</form:form>
10.errors标签
<form:errors path= “ *” /> :显示表单所有的错误
<form:errors path= “ user*” /> :显示所有以 user 为前缀的属性对应的错误
<form:errors path= “ username” /> :显示特定表单对象属性的错误