posts - 431,  comments - 344,  trackbacks - 0

          使用Springmodules的Commons Validator做驗(yàn)證需要兩個(gè)bean(ValidatorFactoryBeanValidator)及兩xml文件(validator-rules.xmlvalidation.xml)的支持,ValidatorFactory用于制造BeanValidator,后者則是在程序中執(zhí)行校驗(yàn)的控制bean。validator-rules.xml中定義了各種驗(yàn)證的規(guī)則,如字段不為空,字段輸入值必須為整數(shù)等等,在這里可以自己擴(kuò)展驗(yàn)證規(guī)則。而validation.xml中則定義了那些bean及bean中的哪些屬性字段需要驗(yàn)證,使用哪些驗(yàn)證規(guī)則。validate 分為兩級(jí)驗(yàn)證,客戶端驗(yàn)證(javascript)和服務(wù)器端驗(yàn)證。以下是使用validate的步驟:

          1.       在配置<action>-servlet.xml文件中聲明ValidatorFactoryBeanValidator
          <!-- validation -->
           <bean id="validatorFactory" class="org.springmodules.validation.commons.DefaultValidatorFactory">
              <property name="validationConfigLocations">
                  <list>
                      <value>WEB-INF/validator-rules.xml</value>
                      <value>WEB-INF/validation.xml</value>
                  </list>
              </property>
           </bean>
           
           <bean id="beanValidator" class="org.springmodules.validation.commons.DefaultBeanValidator">
               <property name="validatorFactory" ref="validatorFactory"/>
           </bean>
          ①     聲明validatoFactory 這里我們使用DefaultValidatorFactory
          ②     定義其validationConfigLocations屬性,將validator-rules.xml和validation.xml傳入
          ③     聲明beanValidator 這里我們使用DefaultBeanValidator
          ④     在其屬性中指明要使用的validatorFactory 。這里我們使用剛剛定義的validatorFactory
          這里需要注意的是隨著Springmodules版本的不同,DefaultValidatorFactory和DefaultBeanValidator的包路徑有可能不同。

          2.       在需要進(jìn)行驗(yàn)證的controller(即要使用form表單或者command的controller)中聲明validate。
          <bean id="compoundMainController" class="com.founder.action.CompoundMainController">
             <property name="formView">
              <value>regcompound</value>
             </property>
             <property name="successView">
              <value>regcompound</value>
             </property>
             <property name="commandClass">
              <value>com.founder.domain.ChemicalInfo</value>
             </property>
             <property name="commandName">
              <value>chemicalInfo</value>
             </property>
             <property name="compoundService">
              <ref bean="compoundService"/>
             </property>
             <property name="validator" ref="beanValidator" />
           </bean>
          ①     commandName 用于指明需要驗(yàn)證的 command的名字,這個(gè)名字必須和 validation.xml中<form name=" xxxxx "> 所寫的名字保持一致。
          ②     commandClass用于指定這個(gè)command的類型。其必須與你jsp提交的form最后形成的command類型相一致。
          ③     聲明該controller使用validator,這里將我們剛剛定義的beanValidator傳入進(jìn)去。

          3.       validation.xml文件中,定義你要校驗(yàn)的formbean(或者說是command) ,定義這個(gè)bean中有哪幾個(gè)field需要驗(yàn)證,使用何種規(guī)則驗(yàn)證。(注意:這里定義的form name 必須和前面controller中定義的commandName保持一致)以下是幾種常用的驗(yàn)證示例:
                  <form name="chemicalInfo">
                      <field property="saltForm" depends="maxlength,required">
                          <arg0 key="chemicalInfo.saltForm.displayName" />
                          <arg1 name="maxlength" key="${var:maxlength}" resource="false" />
                          <var>
                              <var-name>maxlength</var-name>
                              <var-value>30</var-value>
                          </var>
                      </field>
                      <field property="saltNumber" depends="required">
                          <arg0 key="chemicalInfo.saltNumber.displayName" />
                      </field>
                  </form>
          而validator-rules.xml默認(rèn)模板可以從下載的spring-modules-0.9.zip(當(dāng)然你下的版本可能不同)里面的可以找到。

          4.  jsp頁面中定義錯(cuò)誤信息顯示語句:
          <spring:bindpath="chemicalInfo.*">   -----①
              <c:iftest="${not empty status.errorMessages}">
              <div class="error">  
                  <c:forEachvar="error" items="${status.errorMessages}">
                      <c:outvalue="${error}"escapeXml="false"/><br/>
                  </c:forEach>
              </div>
              </c:if>
          </spring:bind>
          ①      這里的path必須要與傳入該 jsp的bean的名字一樣。如傳入該jsp的數(shù)據(jù)bean叫chemicalInfo,path就應(yīng)該寫為chemicalInfo.*。

          5使客戶端產(chǎn)生javascript代碼:
          <v:javascriptformName="chemicalInfo"    -----①
          staticJavascript="false" xhtml="true" cdata="false"/>
          <script type="text/javascript" src="<c:urlvalue="scripts/validator.jsp"/>"></script>
           
          ①      v:javascript標(biāo)簽是spring的標(biāo)簽,定義在spring-commons-validator.tld 。其中formName必須與validation.xml中form的name保持一致。
          posted on 2009-01-08 22:54 周銳 閱讀(2434) 評(píng)論(0)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 菏泽市| 宁蒗| 中西区| 晋州市| 专栏| 桦川县| 上蔡县| 丹棱县| 舒兰市| 霸州市| 花垣县| 肇州县| 沙雅县| 天峨县| 南靖县| 平遥县| 临沧市| 屯昌县| 博野县| 招远市| 南涧| 株洲市| 波密县| 普兰店市| 尼玛县| 屯留县| 秦皇岛市| 邛崃市| 华坪县| 昭苏县| 霸州市| 松桃| 连山| 麻阳| 都兰县| 延长县| 沙田区| 通渭县| 宜良县| 浏阳市| 壶关县|