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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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="/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表单验证的主要内容,如果未能解决你的问题,请参考以下文章

FunnyBear的Java之旅 - Spring篇7步连接MySQL

第1章—Spring之旅—简化Spring的java开发

Spring学习笔记——Spring之旅

spring之旅

Java之旅--定时任务(TimerQuartzSpringLinuxCron)

SpringInAction读书笔记--第1章Spring之旅