1. 程式人生 > >.Net轉Java自學之路—SpringMVC框架篇四(校驗)

.Net轉Java自學之路—SpringMVC框架篇四(校驗)

基本 row str 出錯 edi otn basename value string

SpringMVC使用Hibernate的校驗框架validation(和Hibernate沒有關系)。

頁面提交請求的參數,請求到Controller方法中,使用validation進行校驗。除去使用校驗Jar包外,還需要在SpringMVC.xml中來配置validation校驗器。

<!-- 校驗器,配置validator -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <!--
hibernate校驗器--> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property> <!--指定校驗使用的資源文件,在文件中配置校驗的錯誤信息,若不指定則默認使用classpath下的ValidationMessage.peoperties--> <property name="validationMessageSource" ref="validationMessageSource"
></property> </bean> <!-- 配置validationMessageSource 校驗錯誤信息配置文件 --> <bean id="validationMessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <!-- 資源名稱 指定校驗信息的資源文件的基本文件名稱,不包括後綴,後綴默認是properties --> <property
name="basenames"> <list> <value>classpath:validationMessageSource</value> </list> </property> <!-- 指定文件的編碼 --> <property name="fileEncodings" value="utf8"></property> <!-- 對資源文件內容緩存的時間,單位秒 --> <property name="cacheSeconds" value="120"></property> </bean>

  將校驗器註入到處理器適配器中

<mvc:annotation-driven conversion-service="conversionService" validator="validator">
</mvc:annotation-driven>

  在validationMessageSource.properties中配置校驗錯誤信息。如:

goods.name.size.msg=輸入的名稱長度在1到20個字符之間
goods.time.isNULL=時間不能為空
public class Goods{
    @Size(min=1,max=20,message="{goods.name.size.msg}")
    private String name;
    
    @NotNull(message="{goods.time.isNULL}")
    private Date time;
    
    //GET/SET Code...
}

捕獲校驗錯誤信息:

  在需要校驗的controller方法的形參pojo前加入@Validated,pojo後面添加BindingResult bindingResult接收校驗出錯信息。
  註:@Validation和BindingResult是配對出現的。並且形參順序是固定的。

public String edit(Model model,Integer id,@Validated GoodsCustom goodsCustom,BindingResult bindingResult) throws Exception{
    //判斷是否有錯誤信息
    if(bindingResult.hasErrors()){
        //輸出錯誤信息
        List<ObjectError> allerr = bindingResult.getAllErrors();
        
        for(ObjectError oe : allerr){
            //得到錯誤信息
            oe.getDefaultMessage();
        }
    }
}

  然後再controller方法中捕獲的錯誤信息傳到頁面中

model.addAttribute("AllError",allerr);

分組校驗:

  在pojo中帝國一校驗規則,而pojo是被多個controller所公用,當不同的controller方法對同一個pojo進行校驗,但每個controller方法需要不同的校驗規則。

  綜上所述,則需要定義多個校驗分組(Java接口),分組中定義有校驗規則。每個controller方法使用不同的校驗分組。

public interface ValidatedGroupOne{
    //接口中不需要定義任何方法,僅是對不同的校驗規則進行分組
    //如當前分組只校驗名稱長度
}

  在校驗規則中用groups指定此校驗屬於那個分組,groups可以定義多個分組。

public class Goods{
    
    @Size(min=1,max=20,message="{goods.name.size.msg}",groups={ValidatedGroupOne.class})
    private String name;
    
    @NotNull(message="{goods.time.isNULL}")
    private Date time;
}

  在controller方法中使用分組校驗:@Validated(value={分組校驗接口.class})指定使用那個分組的校驗。

public String edit(Model model,Integer id,@Validated(value={ValidatedGroupOne.class}) GoodsCustom goodsCustom,BindingResult bindingResult) throws Exception{

}

.Net轉Java自學之路—SpringMVC框架篇四(校驗)