Spring MVC数据校验

Spring MVC提供了两种方法验证输入,一种是利用Spring自带的Validation校验框架,另一种是利用JSR 303(Java验证规范)实现校验功能。

1.导入依赖包,本例是使用Hibernate Validator实现的。(JSR 303有两种实现Hibernate Validator和Apache bval)

        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>${vesion}</version>
        </dependency>

2.新建Account类,成员变量上使用了Hibernate Validator的扩展注解验证输入。

public class Account {
    @NotEmpty
    private String username;
    @NotEmpty
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "Account{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

3.新建Login和SuccessJSP页面,引入Spring标签库。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix= "spring" uri= "http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
    <title><spring:message code="login"/></title>
    <%--省略jquery,bootstrap引入--%>
</head>
<body>
<div style="padding: 100px 100px 10px;">
    <a href="/login?language=zh_CN">中文</a>&nbsp|&nbsp<a href="/login?language=en_US">English</a>
</div>
<form:form class="form-horizontal" role="form" action="/doLogin" modelAttribute="account">
    <div class="form-group">
        <label for="user" class="col-sm-2 control-label"><spring:message code="user"/></label>
        <div class="col-sm-3">
            <form:input path="username" type="text" class="form-control" id="user"/>
            <form:errors path="username" cssStyle= "color:red"/>
        </div>
    </div>
    <div class="form-group">
        <label for="password" class="col-sm-2 control-label"><spring:message code="password"/></label>
        <div class="col-sm-3">
            <form:input path="password" type="text" class="form-control" id="password" />
            <form:errors path="password" cssStyle= "color:red"/>
        </div>
    </div>
    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <button type="submit" class="btn btn-default"><spring:message code="login"/></button>
        </div>
    </div>
</form:form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
欢迎:${account.user}!
</body>
</html>

3.新建LoginController

@Controller
public class LoginController {
    
    @RequestMapping(value = "/{fileName}")
    public String login(@PathVariable String fileName, String language, Model model,HttpServletRequest request, HttpServletResponse response){
        if (null == language || "zh_CN".equals(language)){
            Locale locale = new Locale("zh","CN");
            new CookieLocaleResolver().setLocale(request,response,locale);
        }
        if ("en_US".equals(language)){
            Locale locale = new Locale("en","US");
            new CookieLocaleResolver().setLocale(request,response,locale);
        }
        Account account = new Account();
        model.addAttribute(account);
        return fileName;
    }

    @RequestMapping(value = "/doLogin")
//数据校验使用@Valid注解,后面跟着Errors对象保存校验信息
public String doLogin(@Valid @ModelAttribute Account account, Errors errors, Model model){ if (errors.hasErrors()){ return "login"; } model.addAttribute(account); return "success"; } }

4.实现国际化准备两个资源文件:

message_en_US.properties

login = Login
user = User
password = Password

NotEmpty.account.username = Please Enter Username
NotEmpty.account.password = Please Enter Password

message_zh_CN.properties

#中文转unicode
login = \u767b\u5f55
user = \u7528\u6237\u540d
password = \u5bc6\u7801

NotEmpty.account.username = \u8bf7\u8f93\u5165\u7528\u6237\u540d
NotEmpty.account.password = \u8bf7\u8f93\u5165\u5bc6\u7801

如果不需要实现国际化,使用校验注解时直接赋值@NotEmpty(message=" ")

 

效果演示:

 

posted on 2017-11-30 21:25  4l3x丶  阅读(187)  评论(0)    收藏  举报

导航