1. 程式人生 > >SpringMVC學習(三)———— springmvc的資料校驗的實現

SpringMVC學習(三)———— springmvc的資料校驗的實現

一、什麼是資料校驗?

      這個比較好理解,就是用來驗證客戶輸入的資料是否合法,比如客戶登入時,使用者名稱不能為空,或者不能超出指定長度等要求,這就叫做資料校驗。

      資料校驗分為客戶端校驗和服務端校驗

        客戶端校驗:js校驗

        服務端校驗:springmvc使用validation校驗,struts2使用validation校驗。都有自己的一套校驗規則。

      

      

二、springmvc的validation校驗

      Springmvc本身沒有校驗功能,它使用hibernate的校驗框架,hibernate的校驗框架和orm沒有關係

      2.1、新增jar包

          

      2.2、在springmvc.xml中配置validator校驗器,基本上直接複製拿過去用即可。

          配置以下這些,相當於有人幫我們寫好了校驗程式碼,我們拿過來直接用就行了,所以需要進行配置。

          

          將validator註冊到介面卡中

          方式一(推薦)

            

          方式二:如果配置檔案中使用的是非註解方式編寫的介面卡,則這樣配置

          

 <!-- 校驗器,配置validator -->
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
        <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>
複製程式碼
    <!-- 校驗器,配置validator -->
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
        <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>
複製程式碼

 

      2.3、validationMessageSource.properties

        該配置檔案的作用就是儲存校驗失敗時的提示文字資訊的,也就是相當於將其提取出來放到配置檔案中,

          

      

      2.4、在pojo中指定校驗規則

        列舉兩個校驗規則(使用的是註解校驗),notnull和size

          

        1、items.name.size和items.createtime.notnull:就是讀取validationMessageSource.properties中的配置資訊。從這裡就可以理解該配置檔案的意義,防止硬編碼。

        2、使用註解對需要進行校驗的屬性進行繫結,而能夠使這些註解生效的前提就是配置此前的幾個步驟,2.1、2.2、2.3都必不可少

          其他校驗規則摘抄自網上

          

          

 

      2.5、controller中對其校驗繫結進行使用

          

        1、@Validated作用就是將pojo內的註解資料校驗規則(@NotNull等)生效,如果沒有該註解的宣告,pojo內有註解資料校驗規則也不會生效

        2、BindingResult物件用來獲取校驗失敗的資訊(@NotNull中的message),與@Validated註解必須配對使用,一前一後

        3、程式碼中的邏輯應該很容易看懂,就是將result中所有的錯誤資訊取出來,然後到原先的頁面將錯誤資訊進行顯示,注意,要使用model物件,則需要在形參中宣告Model model,然後菜能使用

 

      2.6、jsp頁面

          

 

      2.7、總結

        其實非常簡單,直接使用註解對其進行校驗就完事了,校驗程式碼都替我們寫好了,只需要配置一下即可。傻瓜式操作。不會的看上面步驟,一步步來。

 

三、分組校驗

      3.1、什麼是分組校驗?

        校驗規則是在pojo 制定的,而同一個pojo可以被多個Controller使用,此時會有問題,即:不同的Controller方法對同一個pojo進行校驗,此時這些校驗資訊是共享在這不同的Controller方法           中,但是實際上每個Controller方法可能需要不同的校驗,在這種情況下,就需要使用分組校驗來解決這種問題,

        通俗的講,一個pojo中有很多屬性,controller中的方法1可能只需要校驗pojo中的屬性1,controller中的方法2只需要校驗pojo中的屬性2,但是pojo中的校驗註解有很多,怎樣才能使方法1只校          驗屬性1,方法二隻校驗屬性2呢?就需要用分組校驗來解決了。

      3.2、定義分組

          

        就是定義空的介面,介面類只作為這個分組標識來使用,看下面的用法,就知道其意義何在了

 

      3.3、使用分組

        

      3.4、controller方法

         在這個方法中,那麼就只會校驗items這個pojo中有ValidationGroup1這個分組的校驗註解,而不會在校驗其他的

        

 

四、總結

      資料校驗就這樣講完了,非常簡單吧,拿過來就是一頓用即可。