[轉]關于struts中validate的幾種情況

          轉自:http://hi.baidu.com/helloween0809/blog/item/091c2ef5fd64d625bc3109ab.html

          這里采用了最新版本struts-1.2.7,是在struts-blank的基礎上演示的,為了以后的學習和參考用。

           

          一、在對應的Form Baens中重載validate方法

          在struts-config.xml文件中,action節點下有“validate”這樣一個屬性。在struts框架中,默認屬性是validate=”true”。所以如果想通過Form Baens的重載validate方法來驗證數據的話,可以不用理會這一點。題外話:如果你在struts-config.xml文件中,設置validate="false"的話,validate方法將不起作用。這一點同樣對Validate框架來驗證數據起作用。

           

          二、通過Validate框架來驗證數據

          1、首先在struts-config.xml文件中,追加如下代碼:

          <plug-in className="org.apache.struts.validator.ValidatorPlugIn">

          <set-property property="pathnames"

          value="/WEB-INF/validator-rules.xml,/WEB-INF/validations.xml"/>

          <set-property property="stopOnFirstError" value="false"/>

          </plug-in>

           

          2、然后編寫自己的Form Baens,有兩種方式可供選擇:

          ① 寫的formBaen需要繼承ValidatorForm,而不是第一種方法中的ActionForm

          public class UserForm extends ValidatorForm {

          private String userId = "";

          private String password = "";

          public void setUserId(String userId) {

          this.userId = userId;

          }

          public String getUserId() {

          return userId;

          }

          。。。。。。

          然后配置struts-config文件

          <form-bean name="userForm"

          type="com.wxhx.presentation.UserForm"/>

          ② 配置struts-config文件

          <form-beans>

          <form-bean name=" userForm"

          type="org.apache.struts.validator.DynaValidatorForm">

          <form-property name=" userId" type="java.lang.String"/>

          <form-property name="password" type="java.lang.String"/>

          </form-bean>

          </form-beans>

          3、配置validation.xml文件

          <formset>

          <form name="userForm"> ----這里的userForm是Form Beans的名字

          <field

          property="userId"

          depends="required">

          <arg key="userForm.userId"/>

          </field>

          <field

          property="password"

          depends="required,mask">

          <arg key="userForm.password"/>

          <var>

          <var-name>mask</var-name>

          <var-value>^[0-9a-zA-Z]*$</var-value>

          </var>

          </field>

          </form>

          </formset>

          其中key="userForm.userId"和key="userForm.password"需要在資源文件中配置

          這里需要說明一點,例如:<arg key="userForm.password" resource="false"/>

          如果多了resource="false"這句話,那么它不會再從資源文件中去取,而是直接用key值來表示。

           

          以上是通過validatorForm- or DynaValidatorForm來實現Validate驗證的

           

          (附)

          現在有這樣一個問題,Form Beans可以被多個Action應用,而每個Action可能需要的驗證字段都不一樣。而在validation.xml中配置的驗證方式(如<form name="userForm">)是對這個Form Beans進行的。這樣的話,如何來驗證呢?

          你的Form Beans可以繼承ValidatorActionForm(當然可以直接配置DynaValidatorActionForm)。如下所示:

          public class UserForm extends ValidatorActionForm {

          ...

          }

          或是

          <form-bean name=" userForm "

          type="org.apache.struts.validator.DynaValidatorActionForm">

          ...

          </form-bean>

           

          struts-config文件配置如下:

          <action-mappings>

          <action path="/technology/createUser"

          type="com.wxhx.minihr.CreateUserAction"

          name="userForm"/>

           

          <action path="/technology/editUser"

          type="com.wxhx.minihr.EditUserAction"

          name="userForm"/>

          </action-mappings>

           

          validation.xml文件配置如下:

          <formset>

          <form name="/technology/ createUser ">----這里的采用的是action的path路徑

          <field property="city"

          depends="required">

          <arg0 key="prompt.city"/>

          </field>

          </form>

          <form name="/technology/editUser ">

          <field property="state"

          depends="required">

          <arg0 key="prompt.state"/>

          </field>

          </form>

          </formset>

           

          關于validator-rules.xml,定義了常用的一些規則,當然也可以自己追加新的規則。

          這里經常會看到msg="errors.required"字樣,也是通過資源文件中配置的,默認的資源如下:

          # -- validator --

          errors.invalid={0} is invalid.

          errors.maxlength={0} can not be greater than {1} characters.

          errors.minlength={0} can not be less than {1} characters.

          errors.range={0} is not in the range {1} through {2}.

          errors.required={0} is required.

          errors.byte={0} must be an byte.

          errors.date={0} is not a date.

          errors.double={0} must be an double.

          errors.float={0} must be an float.

          errors.integer={0} must be an integer.

          errors.long={0} must be an long.

          errors.short={0} must be an short.

          errors.creditcard={0} is not a valid credit card number.

          errors.email={0} is an invalid e-mail address.

          這在struts-blank的例子中會有,在開發項目的時候,注意這些默認資源

          關于自己定義規則,以后再作研究

           

          三、結合上面的兩種驗證

          如果即在Form Beans中重載了validate方法,又啟用了Validate框架,那會是什么效果呢?

          由于要啟用Validate框架,Form Beans需要繼承ValidatorForm,查看ValidatorForm的源代碼,發現validate方法已經作了處理(真是為Validate框架所服務的)。

          那么在Form Beans中重載了validate方法的話,就會覆蓋原有ValidatorForm中對應的功能,所以如果想一起用的話,需要在Form Beans的validate方法中調用errors = super.validate(mapping, request);這句代碼是啟用Validate框架所要做的工作,然后可以判斷errors再作下一步的處理。

          當然也可以先做Form Beans中的validate方法,然后啟用Validate框架,要看具體情況而定。

           

          四、啟用客戶端驗證

          也是結合validation.xml來驗證的,我把validation.xml相關的內容在復制下來,便于看清楚:

          <formset>

          <form name="userForm"> ----這里的userForm是Form Beans的名字

          <field

          property="userId"

          depends="required">

          <arg key="userForm.userId"/>

          </field>

          <field

          property="password"

          depends="required,mask">

          <arg key="userForm.password"/>

          <var>

          <var-name>mask</var-name>

          <var-value>^[0-9a-zA-Z]*$</var-value>

          </var>

          </field>

          </form>

          </formset>

           

          ①在需要客戶端驗證的jsp中加上這么一句<html:javascript formName=" userForm "/>
          其中formName就是validation.xml中<form name="userForm">所對應的內容

          ②在<html:form中追加一個屬性onsubmit="return validateUserForm(this);"

          它的語法為:return validate + struts-config.xml中定義的form-bean名稱 + (this);

          ③追加<scriptlanguage="Javascript1.1" src="staticJavascript.jsp"></script>

          staticJavascript.jsp的內容為:

          <%@ page language="java" %>

          <%-- set document type to Javascript(addresses a bug in Netscape according

          to a web resource --%>

          <%@ page contentType="application/x-javascript" %>

          <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

          <html:javascript dynamicJavascript="false" staticJavascript="true"/>

          這只是一種方式,還有其他簡潔的(具體為啥這樣,不是很明白,希望得到)

          比如:追加onsubmit="return validateUserForm(this);"

          <html:javascript formName="userForm" staticJavascript="true"/>

          posted on 2008-04-11 12:13 hijackwust 閱讀(1120) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2008年4月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆檔案(57)

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 定州市| 玛多县| 商丘市| 玛沁县| 西林县| 山西省| 锡林郭勒盟| 北票市| 长葛市| 许昌市| 日照市| 偃师市| 弥渡县| 临高县| 达孜县| 乐陵市| 普陀区| 五峰| 合川市| 江阴市| 嘉峪关市| 广安市| 涟水县| 和平县| 兴城市| 武陟县| 达日县| 杨浦区| 治县。| 黎城县| 龙口市| 洛川县| 都江堰市| 临漳县| 舒兰市| 温州市| 灌南县| 太仓市| 永吉县| 平乡县| 金湖县|