2010-04-06 112 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>