Spring 3 MVC and JSR303 @Valid example
2014-01-21 11:16
483 查看
http://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/
————————————————————————————————————————————————————————
用jsr303验证表单数据,搞了很长时间,验证倒是验证了,但是@Valid不起作用,表现是:
无论是否加@Valid, 都会验证,并且spring无法捕获到异常BindingResult.hasErrors始终是false。
上面那个例子就可以。具体原因还不是很明了,按上面那个例子,对有问题的项目做如下处理:
1 使用<mvc:annotation-driven />
2 去掉DefaultAnnotationHandlerMapping, ControllerClassNameHandlerMapping, AnnotationMethodHandlerAdapter
3 因为去掉了ControllerClassNameHandlerMapping,在控制器做相应处理
————————————————————————————
现在想想之前尝试各种办法都不成功,有没有可能跟这个异常有关系呢?应该没有,之前应该已经尝试过这种情况。
In Spring 3, you can enable “mvc:annotation-driven” to support JSR303 bean validation via
Note
Hibernate Validator is the reference implementation for JSR 303
In this tutorial, we show you how to integrate Hibernate validator with Spring MVC, via
Technologies used :
Spring 3.0.5.RELEASE
Hibernate Validator 4.2.0.Final
JDK 1.6
Eclipse 3.6
Maven 3
Note
Refer to this Hibernate validator documentation for detail explanation
You can override it easily, create a properties with “key” and message. To know which @annotation bind to which key, just debug it and view value inside “
File : messages.properties
File : SignUpForm.jsp
File : Done.jsp
URL : http://localhost:8080/SpringMVC/customer/signup – If you didn’t fill in the form and click on the “submit” button, your customized validation error messages will be displayed.
JSR303 bean validation
Hibernate Validator
————————————————————————————————————————————————————————
用jsr303验证表单数据,搞了很长时间,验证倒是验证了,但是@Valid不起作用,表现是:
无论是否加@Valid, 都会验证,并且spring无法捕获到异常BindingResult.hasErrors始终是false。
上面那个例子就可以。具体原因还不是很明了,按上面那个例子,对有问题的项目做如下处理:
1 使用<mvc:annotation-driven />
2 去掉DefaultAnnotationHandlerMapping, ControllerClassNameHandlerMapping, AnnotationMethodHandlerAdapter
3 因为去掉了ControllerClassNameHandlerMapping,在控制器做相应处理
————————————————————————————
现在想想之前尝试各种办法都不成功,有没有可能跟这个异常有关系呢?应该没有,之前应该已经尝试过这种情况。
Caused by: java.lang.OutOfMemoryError: PermGen space
————————————————————————————————————————————————————————In Spring 3, you can enable “mvc:annotation-driven” to support JSR303 bean validation via
@Validannotation, if any JSR 303 validator framework on the classpath.
Note
Hibernate Validator is the reference implementation for JSR 303
In this tutorial, we show you how to integrate Hibernate validator with Spring MVC, via
@Validannotation, to perform bean validation in a HTML form.
Technologies used :
Spring 3.0.5.RELEASE
Hibernate Validator 4.2.0.Final
JDK 1.6
Eclipse 3.6
Maven 3
1. Project Dependencies
Hibernate validator is available at JBoss public repository.<repositories> <repository> <id>JBoss repository</id> <url>http://repository.jboss.org/nexus/content/groups/public/</url> </repository> </repositories> <properties> <spring.version>3.0.5.RELEASE</spring.version> </properties> <dependencies> <!-- Spring 3 dependencies --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- Hibernate Validator --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.2.0.Final</version> </dependency> </dependencies>
2. JSR303 Bean Validation
A simple POJO, annotated with Hibernate validator annotation.Note
Refer to this Hibernate validator documentation for detail explanation
package com.mkyong.common.model; import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.Range; public class Customer { @NotEmpty //make sure name is not empty String name; @Range(min = 1, max = 150) //age need between 1 and 150 int age; //getter and setter methods }
3. Controller + @Valid
For validation to work, just annotate the “JSR annotated model object” via@Valid. That’s all, other stuff is just a normal Spring MVC form handling.
package com.mkyong.common.controller; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.mkyong.common.model.Customer; @Controller @RequestMapping("/customer") public class SignUpController { @RequestMapping(value = "/signup", method = RequestMethod.POST) public String addCustomer(@Valid Customer customer, BindingResult result) { if (result.hasErrors()) { return "SignUpForm"; } else { return "Done"; } } @RequestMapping(method = RequestMethod.GET) public String displayCustomerForm(ModelMap model) { model.addAttribute("customer", new Customer()); return "SignUpForm"; } }
4. Error Message
By default, if validation failed.@NotEmptywill display “may not be empty”
@Rangewill display “must be between 1 and 150″
You can override it easily, create a properties with “key” and message. To know which @annotation bind to which key, just debug it and view value inside “
BindingResult result“. Normally, the key is “@Annotation Name.object.fieldname“.
File : messages.properties
NotEmpty.customer.name = Name is required! Range.customer.age = Age value must be between 1 and 150
5. mvc:annotation-driven
Enable “mvc:annotation-driven” to make Spring MVC supports JSR303 validator via
@Valid, and also bind your properties file.
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <context:component-scan base-package="com.mkyong.common.controller" /> <!-- support JSR303 annotation if JSR 303 validation present on classpath --> <mvc:annotation-driven /> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/pages/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <!-- bind your messages.properties --> <bean class="org.springframework.context.support.ResourceBundleMessageSource" id="messageSource"> <property name="basename" value="messages" /> </bean> </beans>
6. JSP Pages
Last one, normal JSP page with Spring form tag library.File : SignUpForm.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <html> <head> <style> .error { color: #ff0000; } .errorblock { color: #000; background-color: #ffEEEE; border: 3px solid #ff0000; padding: 8px; margin: 16px; } </style> </head> <body> <h2>Customer SignUp Form - JSR303 @Valid example</h2> <form:form method="POST" commandName="customer" action="customer/signup"> <form:errors path="*" cssClass="errorblock" element="div" /> <table> <tr> <td>Customer Name :</td> <td><form:input path="name" /></td> <td><form:errors path="name" cssClass="error" /></td> </tr> <tr> <td>Customer Age :</td> <td><form:input path="age" /></td> <td><form:errors path="age" cssClass="error" /></td> </tr> <tr> <td colspan="3"><input type="submit" /></td> </tr> </table> </form:form> </body> </html>
File : Done.jsp
<html> <body> <h2>Done</h2> </body> </html>
6. Demo
URL : http://localhost:8080/SpringMVC/customer – Customer form page, with 2 text boxes for name and age.URL : http://localhost:8080/SpringMVC/customer/signup – If you didn’t fill in the form and click on the “submit” button, your customized validation error messages will be displayed.
Download Source Code
Download it – SpringMVC-Bean-Validation-JSR303-Example-2.zip (9 KB)References
Spring JSR303 validation documentationJSR303 bean validation
Hibernate Validator
相关文章推荐
- 名词学习
- java集合简介
- spring配置datasource三种方式
- Java其实不支持垃圾回收
- SSH项目整合简介
- 使用 Spring Data JPA 简化 JPA 开发
- 8大排序算法JAVA实现
- spring3、hibernate4、JPA整合
- Java获取当前类名、方法名
- Java集合对象排序
- Spring + EHcache配置
- 如何在java方法中获得当前方法的名称
- java代码获取当前类类名、方法名
- java自定义异常类
- writing aborted; java.io.NotSerializableException
- Struts2与Websocket配置UrlPattern冲突问题
- Java 连接SQL SERVER 2008数据库
- java 装饰器模式
- Java unicode中文编码转换和反转
- Java中Map循环的两种方式