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> | <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=" ")
效果演示:

浙公网安备 33010602011771号