1、需要的相关jar

  这里采用的是hibernate-validator-5.2.4.Final 和validation-api-1.1.0.Final 两个jar包。Hibernate Validator 是 Bean Validation 的参考实现, Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。使用maven下载代码如下:

 <dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>

2、文件的配置

springservlet-config.xml文件配置如下:

 <mvc:annotation-driven validator="validator"
conversion-service="conversion-service" />
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<property name="validationMessageSource" ref="validatemessageSource" />
</bean>
<bean id="conversion-service"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
<bean id="validatemessageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:i18n" />
<property name="fileEncodings" value="utf-8" />
<property name="cacheSeconds" value="120" />
</bean>

其中<property name="basename" value="classpath:i18n" />是验证错误后提示的消息所在的文件,需要在classpath路径下添加,也可以自己设置路径。

3、controller, user和i18n.properties代码

UserControlelr代码部分代码如下:

 package org.springframework.samples.myjpetstores.controller;

 import javax.validation.Valid;

 import org.springframework.samples.myjpetstores.io.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
public class UserController {
@RequestMapping("/login")
public String userLogin(@Valid User user, BindingResult result, ModelMap model)
{
if(result.hasErrors())
{
return "loginForm";
}
return "index";
}
}

代码中需要注意的是,@Valid是必须的,只有加上@Valid,才会对传过来的参数 User类进行验证,后面必须紧跟着BindingResult result, 其中result是用来存放验证错误信息的,它们之间是不能有任务参数的,是成对出现的,有多少个@Valid,就必须有多少个BindingResult result。

User类代码

 package org.springframework.samples.myjpetstores.io;

 import org.hibernate.validator.constraints.NotEmpty;

 public class User {
@NotEmpty(message="{username.not.empty}")
private String username;
@NotEmpty(message="{password.not.empty}")
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;
} }

验证错误后的消息文件:i18n.properties

 username.not.empty=username is required.
password.not.empty=password is required.

其中name.not.empty和@NotEmpty(message="{username.not.empty}")的{}里的名字必须一致。

4、视图界面

显示错误信息界面:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form:form modelAttribute="user" method="post">
<form:errors path="*"></form:errors>
<form:errors path="username"></form:errors>
<br />
<br />
</form:form>
</body>
</html>

其中需要注意的是<form:form modelAttribute="user" method="post">中的modelAttribute="user"和controller文件里的@Valid @ModelAttribute User user的@ModelAttribute一致,假如@ModelAttribute没有设置名字,就默认为user,假如写成@Valid @ModelAttribute("loginUser") User user,则 modelAttribute="loginUser" 否则不能进行数据绑定的。<form:errors path="*"></form:errors>的*表示所有的错误信息。<form:errors path="username"></form:errors>表示验证username的错误信息。

最新文章

  1. SubSonic3.0 Demo1.0——应用了T4模版可减少开发过程中70%以上的代码量以及80%以上的出错率
  2. Coursera Robotics系列课心得
  3. js判断函数是否存在、判断是否为函数
  4. ELKstack搭建
  5. Javascript的匿名函数与自执行
  6. C# 静态函数调用窗体控件
  7. “康园圈--互联网+校园平台“项目之sprint1总结
  8. [听听音乐]love is blue
  9. longene QQ 安装目录
  10. Objective-C常用类型、对象、方法
  11. 【原创】MIPS&#183;Verilog&#183;FPGA
  12. java按照集合中元素的属性进行排序示例代码
  13. java一切乱码的解释 以及源头【转】
  14. HTML5之Canvas影片广场
  15. IT 必备电脑快捷键
  16. Go语言基础之反射
  17. mongodb常用查询语句
  18. Python学习之路&mdash;&mdash;&mdash;&mdash;Day03
  19. css学习_div+css布局
  20. win7 &quot;com surrogate“ 已停止工作的解决办法

热门文章

  1. 11. Container With Most Water 装水最多的容器
  2. 马婕 2014MBA专硕考试 词汇每日一练(转)
  3. jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version
  4. Alpha冲刺 - (6/10)
  5. 4、Docker的安装
  6. long polling
  7. tomcat7-maven-plugin 端口
  8. ASP.NET系列:自定义配置节点的复用
  9. [Erlang26]怎么通过beam文件得到所有的record或源代码?
  10. ActiveX 控件重绘无效问题,用CClientDC 而不是CPaintDC