2010-04-06 126 views
1

我想知道什么是使用Spring 3.0验证html表单的子映射的最佳方法。 验证是简单的强制性检查,不是很注重商业导向。 我目前使用spring-modules-validator + commons-validator,但它是maven dep。是用Spring 2.0,而不是3.0。我没有使用注释。Spring 3.0 MVC客户端验证

回答

2

你提到你目前没有使用注释。如果您愿意使用它们,我推荐使用新的bean验证API(JSR 303)。 Hibernate提供了一个implementation,Spring 3.0支持它。 javax.validation中提供的注释涵盖了大多数基本的单字段验证,您可以将它们应用于任何POJO(不仅仅是表单bean或模型实例)。

2

在春季3 最好路要走使用注释,如果你可以切换。与bean验证API的集成可以轻松添加验证。验证表单bean的所有步骤是在Spring MVC文档的“5.验证,数据绑定和类型转换”注释中添加@Valid(参见“5.7.4.1触发@控制器输入验证”)控制器方法参数。然后,Spring将验证这个bean并将验证错误放入一个BindingResult中。

@Controller 
public class RegisterFormController { 
    ... 
    @RequestMapping(value = "/register", method = RequestMethod.POST) 
    public String submitFormHandler(@ModelAttribute("registration") @Valid User user, BindingResult errors) { 
    if (errors.hasErrors()) { 
     // send user back to form view 
    } else { 
     // handle form submission 
    } 
    } 
    ... 
} 

的文档说Spring会自动设置Bean验证工厂和验证,但如果不为你工作,你可以手动配置它很容易:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="webBindingInitializer"> 
     <!-- Configures Spring MVC DataBinder instances --> 
     <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> 
     <property name="validator" ref="validator" /> 
     </bean> 
    </property> 
    </bean> 

    <!-- Creates the JSR-303 Validator --> 
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 

我也基于验证Spring模块的“valang”验证的客户端实现创建了一个项目,该模块可以基于JSR-303和Hibernate Validator验证注释在JavaScript中提供客户端验证。

http://kenai.com/projects/jsr303js

该项目提供了一个标签库/您包括JavaScript文件把主要的JavaScript代码到网页中,然后你把某个地方在Spring <form:form></form:form>标签的另一个标签触发验证。

<%@ taglib prefix="jsr303js" uri="http://kenai.com/projects/jsr303js/" %> 
    ... 
    <head> 
    ... 
    <script type="text/javascript" src="<c:url value="/js/jsr303js-codebase.js"/>"></script> 
    ... 
    </head> 
    <body> 
    ... 
    <form:form name="regForm" commandName="registration" method="post"> 
     ... 
     <jsr303js:validate commandName="registration"/> 
     ... 
     </form:form>