【问题标题】:Spring 3.0 MVC client validationSpring 3.0 MVC 客户端验证
【发布时间】:2010-04-06 17:03:38
【问题描述】:

我想知道使用 Spring 3.0 验证 html 表单提交的最佳方法是什么。 验证是简单的强制性检查,不是非常面向业务的。 我目前正在使用 spring-modules-validator + commons-validator,但它是 maven dep。与 Spring 2.0 一起使用,而不是 3.0。我没有使用注释。

【问题讨论】:

    标签: spring-mvc validation


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在 Spring 3 中,最好的方法是使用注释,如果你可以切换的话。与 bean 验证 API 的集成使得添加验证变得容易。验证表单 bean 所需要做的就是将 @Valid(参见 Spring MVC 文档章节“5. 验证、数据绑定和类型转换”中的“5.7.4.1 触发 @Controller 输入验证”)注释添加到控制器方法参数。然后 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

      该项目提供了一个 taglib/JavaScript 文件,您可以将主要 JavaScript 代码放入页面,然后将另一个标签放在 Spring &lt;form:form&gt;&lt;/form:form&gt; 标记中的某个位置以触发验证。

      <%@ 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-29
        • 2010-09-14
        • 2014-07-21
        • 1970-01-01
        相关资源
        最近更新 更多