首页 > 代码库 > 【FunnyBear的Java之旅 - Spring篇】Spring表单验证

【FunnyBear的Java之旅 - Spring篇】Spring表单验证

尝试对Spring提供的表单进行了验证

1. 创建表单

在jsp页面中添加如下表单。其中action对应我们准备的Controller,commandName用于指定在pageContext中表单所对应的对象。Spring会自动把表单数据填充到对象中。sf:input和sf:error的path对应对象的属性。

<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<sf:form method="post"    action="${pageContext.request.contextPath}/doCreate"    commandName="user">    <table class="formTable">        <tr>            <td class="label">Name:</td>            <td><sf:input name="name" path="name" type="text"></sf:input><br />                <sf:errors path="name" cssClass="error"></sf:errors></td>        </tr>        <tr>            <td class="label">Email:</td>            <td><sf:input name="email" path="email" type="text"></sf:input><br />                <sf:errors path="email" cssClass="error"></sf:errors></td>        </tr>        <tr>            <td></td>            <td><input value="Create user" type="submit"></input></td>        </tr>    </table></sf:form>

2. 添加Controller方法

当访问表单所在页面时,我们需要向pageContext中添加一个与form commandName相对应的对象。

@RequestMapping("/createUser")public String createUser(Model model) {    model.addAttribute("user", new User());    return "createUser";}

 @Valid表示我们要对从表单传入的user对象进行校验,其结果会被填充到BindingResult对象里,sf:error会从BindingResult对象里,取到相应的错误信息,进行显示。


@RequestMapping(value="http://www.mamicode.com/doCreate", method=RequestMethod.POST)public String doCreate(Model model, @Valid User user, BindingResult result) { if(result.hasErrors()){ return "createUser"; } else{ usersService.createUser(user); return "userCreated"; }}

3. 在User类中添加检验

校验主要通过标注实现,为此我们引用validation-api-1.1.0.Final.jar和Hibernate的validator。在Maven项目的pom文件中添加如下依赖

<dependency>    <groupId>javax.validation</groupId>    <artifactId>validation-api</artifactId>    <version>1.1.0.Final</version></dependency><dependency>    <groupId>commons-validator</groupId>    <artifactId>commons-validator</artifactId>    <version>1.5.1</version></dependency><dependency>    <groupId>org.hibernate</groupId>    <artifactId>hibernate</artifactId>    <version>3.5.4-Final</version>    <type>pom</type></dependency><dependency>    <groupId>org.hibernate</groupId>    <artifactId>hibernate-validator</artifactId>    <version>5.0.1.Final</version></dependency>

 在字段上添加校验条件

package com.funnybear.springmvc.dao;import javax.validation.constraints.NotNull;import javax.validation.constraints.Size;public class User {        @Size(min=5, max=100, message="Name must be between 5 and 100 characters.")    private String name;        @NotNull    private String email;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public User() {    }        public User(String name, String email) {        super();        this.name = name;        this.email = email;    }    @Override    public String toString() {        return "User [name=" + name + ", email=" + email + "]";    }}

这样在提交的时候就能顺利显示校验结果了。

技术分享

问题:Hibernate类库没有在代码被直接引用,但缺少它,校验结果就无法显示,需要进一步学习。

【FunnyBear的Java之旅 - Spring篇】Spring表单验证