<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

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

     

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

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

     

    二、通過Validate框架來驗證數(shù)據(jù)

    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來實現(xiàn)Validate驗證的

     

    (附)

    現(xiàn)在有這樣一個問題,F(xiàn)orm 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,定義了常用的一些規(guī)則,當然也可以自己追加新的規(guī)則。

    這里經(jīng)常會看到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的例子中會有,在開發(fā)項目的時候,注意這些默認資源

    關于自己定義規(guī)則,以后再作研究

     

    三、結合上面的兩種驗證

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

    由于要啟用Validate框架,F(xiàn)orm Beans需要繼承ValidatorForm,查看ValidatorForm的源代碼,發(fā)現(xiàn)validate方法已經(jīng)作了處理(真是為Validate框架所服務的)。

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

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

     

    四、啟用客戶端驗證

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

    <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">所對應的內(nèi)容

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

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

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

    staticJavascript.jsp的內(nèi)容為:

    <%@ 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 閱讀(1118) 評論(0)  編輯  收藏


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


    網(wǎng)站導航:
     
    <2008年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    導航

    統(tǒng)計

    常用鏈接

    留言簿(6)

    隨筆檔案(57)

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲啪啪综合AV一区| 久草免费手机视频| 亚洲永久在线观看| 亚洲欧洲日产国码无码网站| 嫩草影院在线免费观看| 91免费福利精品国产| 久99久无码精品视频免费播放| 亚洲日韩国产欧美一区二区三区| 亚洲一区免费观看| 亚洲日韩av无码| 亚洲成a人片在线观看久| 大地资源二在线观看免费高清| 少妇太爽了在线观看免费视频 | a视频免费在线观看| 亚洲男人的天堂网站| 亚洲欧洲日产国码二区首页| 亚洲AV无码专区电影在线观看| 亚洲国产成人久久一区WWW| 日本免费观看网站| 久久久久国色AV免费看图片 | 亚洲成AV人在线观看天堂无码| 亚洲av日韩片在线观看| 日本免费电影一区| 四虎成人免费大片在线| 毛片免费在线观看网址| 97在线观免费视频观看| 又粗又大又黑又长的免费视频| 老汉精品免费AV在线播放| 免费福利在线视频| 暖暖日本免费中文字幕| 久久大香香蕉国产免费网站| 最近更新免费中文字幕大全| 51午夜精品免费视频| av成人免费电影| 两性色午夜视频免费播放| 丰满人妻一区二区三区免费视频| 国产高潮久久免费观看| 国产精品极品美女自在线观看免费 | 亚洲大尺度无码无码专区| 国产亚洲精品一品区99热| 亚洲成亚洲乱码一二三四区软件|