本文目录
SpringMVC 提供了一些标签库,可以帮助我们实现数据绑定。使用方法如下
创建工程
参考 【SpringMVC】SpringMVC入门实例创建一个SpringMVC工程
创建完工程工程目录如下:
在pom.xml
中引入标签库
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
引入标签库
在jsp界面写入如下代码段
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
完整的login.jsp
页面如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form:form modelAttribute="user" action="${pageContext.request.contextPath}/index/add" method="post">
<div>
名字:<form:input path="name" />
</div>
<div>
年龄:<form:input path="age"/>
</div>
<div>
<input type="submit" value="添加用户">
</div>
</form:form>
</body>
</html>
Controller
在访问方法上加上Model
参数,把需要传递的数据放到model中
@Controller
public class LoginControl {
@RequestMapping(value = "/index/login")
public String login(Model model){
User user = new User();
user.setName("lucas");
user.setId(1);
user.setAge(18);
model.addAttribute("user",user);
return "login";
}
}
执行结果如下
表单标签
form标签
一般情况下,通过 GET 请求获取表单页面,而通过POST 请求提交表单页面,因此获取表单页面和提交表单页面的 URL 是相同的。只要满足该最佳条件的契约,form:form 标签就无需通过 action 属性指定表单提交的 URL
可以通过 modelAttribute 属性指定绑定的模型属性,若没有指定该属性,则默认从 request 域对象中读取command 的表单 bean,如果该属性值也不存在,则会发生错误。
form标签的属性如下:
属性 | 描述 |
---|---|
属性 | 描述 |
commandName | form绑定的模型属性名称,默认为command |
acceptCharset | 定义服务器接受的字符编码 |
cssClass | 定义要应用到被渲染的form元素CSS类 |
cssStyle | 定义要应用到被渲染的form元素CSS样式 |
htmlEscape | boolean值,表示被渲染的值是否应该进行HTML转义 |
SpringMVC提供了多个表单组件标签,如form:input/、form:select/ 等,用以绑定表单字段的属性值,它们的共有属性如下:
path:表单字段,对应 html 元素的 name 属性,支持级联属性
htmlEscape:是否对表单值的 HTML 特殊字符进行转换,默认值为 true
cssClass:表单组件对应的 CSS样式类名
cssErrorClass:表单组件的数据存在错误时,采取的 CSS样式
input标签
input标签语法格式如下:
<form:input path="***"/>
password标签
password标签的用法跟input标签相似,也能绑定表单数据,只是它生成的是一个密码框,并且多了一个showPassword属性
<form:password path="password"/>
hidden标签
用法跟input相似,也能绑定表单数据,只是它生成的是一个隐藏域
<form:hidden path="id"/>
textarea标签
是一个支持多行输入的HTML元素
<form:textarea path="remark" rows="5" cols="20"/>
checkbox标签
会被渲染为一个类型为checkbox的普通HTML input标签
<!-- label为被渲染的复选框的值 -->
<form:form method="post" action="checkboxForm" modelAttribute="user">
<!-- 当绑定的为数组、List、Set时,checkbox的value属性在绑定的列表数据中存在则为选中状态 -->
<form:checkbox path="friends" value="张三" label="张三"/>;
<form:checkbox path="friends" value="李四" label="李四"/>;
<form:checkbox path="friends" value="王五" label="王五"/>;
<!-- 当绑定的是一个boolean数据时,true为选中,false为不选中 -->
<form:checkbox path="reader" value="true"/>已经阅读相关协议
</form:form>
checkboxes标签
checkboxes标签 属性如下:
属性 | 描述 |
---|---|
items | 可以是一个 List、String[] 或 Map |
itemLabel | 指定 checkbox的 value 值,可以是集合中 bean 的一个属性值 |
itemValue | 指定 checkbox 的 label值,可以是集合中 bean 的一个属性值 |
delimiter | 定义两个input元素之间的分隔符,默认没有分隔符 |
<form:form modelAttribute="employee" method="post" action="checkboxForm2">
<form:checkboxes path="depts" items="${deptList}" itemLabel="name" itemValue="id"/>
</form:form>
radiobutton标签
会被渲染为一个类型为radio的普通HTML input标签
<form:form action="radiobuttionForm" method="post" modelAttribute="student">
<form:radiobutton path="sex" value="男"/>男<br/>
<form:radiobutton path="sex" value="女"/>女
</form:form>
select、option、options标签
属性 | 描述 |
---|---|
items | 用于生成option列表元素的对象的Collection、Map或者Array |
itemLabel | item属性中定义的对象属性,为每个option提供label |
itemValue | item属性中定义的对象属性,为每个option提供value |
<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>
errors标签
<form:errors path= “ *” /> :显示表单所有的错误
<form:errors path= “ user*” /> :显示所有以 user 为前缀的属性对应的错误
<form:errors path= “ username” /> :显示特定表单对象属性的错误