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

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

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

    posts - 5, comments - 24, trackbacks - 0, articles - 20
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Validator驗證框架

    Posted on 2006-09-25 20:50 kook 閱讀(4914) 評論(2)  編輯  收藏 所屬分類: Struts
    Struts1.2中創建驗證框架的步驟:

    1、在struts-config.xml文件中添加下列內容:
    < plug - in?className = " org.apache.struts.validator.ValidatorPlugIn " >
    ????????
    < set - property?property = " pathnames " ?value = " /WEB-INF/validator-rules.xml,
    ??????????????????????????????????????????????????????????????????/WEB-INF/validation.xml
    " ? />

    </ plug - in >

    注意:這些內容必須放在<message-resources>元素之后。該規則是由
    "
    http://struts.apache.org/dtds/struts-config_1_2.dtd "文件制定的。

    2、創建相關的組件:

    為了實驗的目的,我依次創建4個ActionForm類,一個JSP,一個Action類,以下是他們在struts-config.xml中的配置信息:
    ?1?<form-beans?>
    ?2?????<form-bean?name="DVForm"?type="org.apache.struts.validator.DynaValidatorForm">
    ?3???????<form-property?name="name"?type="java.lang.String"?/>
    ?4?????</form-bean>
    ?5?????<form-bean?name="DVAForm"?type="org.apache.struts.validator.DynaValidatorActionForm">
    ?6???????<form-property?name="name"?type="java.lang.String"?/>
    ?7?????</form-bean>
    ?8?????<form-bean?name="VForm"?type="com.kook.struts.form.HahaForm"?/>
    ?9?????<form-bean?name="VAForm"?type="com.kook.struts.form.HohoForm"?/>
    10???</form-beans>
    11?
    12???<global-exceptions?/>
    13???<global-forwards?/>
    14???<action-mappings?>
    15?????< action
    16???????attribute="DVForm"

    17???????input="/form/index.jsp"
    18???????name="DVForm"
    19???????path="/index"
    20???????scope="request"
    21???????type="com.kook.struts.action.IndexAction"?/>
    22???</action-mappings>

    其中
    <form-bean name="VForm" type="com.kook.struts.form.HahaForm" />是ValidatorForm類的子類
    <form-bean name="VAForm" type="com.kook.struts.form.HohoForm" />是ValidatorActionForm類的子類

    下面是JSP頁面代碼:
    1?<html:form?action="/index"?onsubmit="return?validateDVForm(this)">
    2?????????????name?:?<html:text?property="name"/><html:errors?property="name"/><br/>
    3?????????????<html:submit/>
    4??</html:form>
    5??<html:javascript?formName="DVForm"/>

    因為只是做表單驗證,action類可以不用涉及,因此不列出action類的代碼啦!

    3、刪除name="VForm" 和name="VAForm"的ActionForm中的validate方法。

    因為這兩個類不是動態的驗證類,在使用向導生成代碼的時候會自動覆蓋父類的validate方法。如果不刪除的話,根據類的多態性原理,會調用他們生成的validate方法,而不調用他們父類的該方法。但是,實際上,是他們父類的validate方法調用了validator框架的驗證方法,因此我們沒有必要再去重寫他的這個方法。同時也要記得刪除,因為向導生成的是空實現,不刪除的話,起不到驗證作用。切記切記!!!曾經在這吃啊擔子滴!!

    觀察以上代碼不難發現,表單中只有一個文本框,因此實驗也是對這個文本框進行驗證。

    4、創建自定義的驗證文件validation.xml,主要內容如下所示:
    ?1?<form-validation> ????
    ?2?????<formset>

    ?3?????????<form?name="DVForm">
    ?4?????????????<field?property="name"?depends="required">
    ?5?????????????????
    ?6?????????????????<arg0?name="required"?key="lable.name"/>
    ?7?????????????</field>
    ?8?????????</form>
    ?9?????</formset>
    10?</form-validation>

    其中key="lable.name "在資源文件中對應的內容為:lable.name=name,因此,當文本框中沒有輸入任何信息而提交的時候,將會反饋一條name is required.的信息。

    下面開始實驗,
    實驗的目的是:依次使用4種驗證Form來實現表單的驗證功能,
    他們分別是:DynaValidatorForm,DynaValidatorActionForm,ValidatorForm,ValidatorActionForm。這也是前面為什么要創建4個ActionForm的目的,詳細配置信息見前面struts-config.xml
    而JSP頁面只有一個,就是配置文件中的input="/form/index.jsp
    "

    實驗一:由DynaValidatorForm的子類DVForm來驗證



    validation.xml的內容為:
    ?1?<form-validation> ????
    ?2?????<formset>

    ?3?????????<form?name="DVForm">
    ?4?????????????<field?property="name"?depends="required">
    ?5?????????????????
    ?6?????????????????<arg0?name="required"?key="lable.name"/>
    ?7?????????????</field>
    ?8?????????</form>
    ?9?????</formset>
    10?</form-validation>

    struts-config.xml的內容為:
    15?????< action
    16???????attribute="DVForm"

    17???????input="/form/index.jsp"
    18???????name="DVForm"
    19???????path="/index"
    20???????scope="request"
    21???????type="com.kook.struts.action.IndexAction"?/>
    22???</action-mappings>

    /form/index.jsp的主要內容為:
    1?????????<html:javascript?formName="DVForm"/>
    2?????????<html:form?action="/index"?onsubmit="return?validateDVForm(this)">

    <
    html:javascript?formName = " DVForm " />的formName屬性對應的是進行驗證的ActionForm的name屬性。onsubmit="return?validateDVForm(this)"為固定寫法,格式為:onsubmit="return?validateXXX(this)",XXX為Form的name屬性,其中首字母大寫就可以了。

    實驗二: 由ValidatorForm的子類VForm來驗證

    他的配置信息只需要將實驗一中底色為黃色高亮部分的DVForm換成VForm就可以了,他們的區別只在于一個是動態的,一個是非動態的。


    實驗三:由DynaValidatorActionForm的子類DVAForm來驗證

    該實驗的配置信息只需要將實驗一struts-config.xml中底色為黃色高亮部分的DVForm換成DVAForm就可以了,其次是修改validation.xml的內容,具體如下:

    1?<form-validation>????
    2?????<formset>
    3?????????<form?name="/index">
    4?????????????<field?property="name"?depends="required">
    5?????????????????<arg0?name="required"?key="lable.name"/>
    6?????????????</field>
    7?????????</form>
    8?????</formset>
    9?</form-validation>

    區別是<form?name="/index">中的name屬性不再對應的是驗證Form的name屬性,而是其相對的action類的path屬性

    實驗四:由ValidatorActionForm的子類VAForm來驗證

    與實驗三一樣,換掉struts-config.xml中底色為黃色高亮部分的DVAForm換成VAForm就可以了,validation.xml文件中的內容與實驗三保持一致,<form?name="/index">中的name屬性不再對應的是驗證Form的name屬性,而是其相對的action類的path屬性。

    不過用DynaValidatorActionForm和ValidatorActionForm的時候好象不能使用客戶端驗證,只能使用服務器端驗證。還得有高手指點,因此前臺JSP頁面得改成:

    1?????????<html:form?action="/index">
    2?????????????name?:?<html:text?property="name"/><html:errors?property="name"/><br/>
    3?????????????<html:submit/>
    4?????????</html:form>

    下面來介紹一下validation.xml文件中的一些元素信息:

    1、<global>中定義的<constant>和<formset>中定義的<constant>
    前者表示在全局范圍內定義常量,可以在validation.xml文件中的其他<formset>中訪問。訪問格式為${constantName}
    后者表示局部的常量定義,只能在聲明他的<formset>中使用。

    2、<field>元素中的幾個子元素:
    <!ELEMENT field (msg|arg|arg0|arg1|arg2|arg3|var)*>
    也就是說他的所有子元素都可以是0-n個,這一點和孫衛琴的書有出入,以此為準。

    msg元素
    <msg name="" key="" bundle="" resource=""/>

    name:表示驗證規則的邏輯名;
    key:對應資源文件中的key;
    bundle:指定從哪個資源文件獲取key值,缺省時為默認的資源文件;
    resource:為true是表示從資源文件中獲取key屬性對應的信息,為false時表示直接顯示key屬性的內容,和資源文件無關。缺省為true。

    Strust框架中指定了一些常用規則的對應文本,驗證框架默認是從這些對應的文本中讀取信息。但是我們可以通過指定msg元素來從自定義的資源文件或者是key中來獲取消息。

    arg.....元素用來指定復合文本中的參數,依次對應。他們的屬性和msg的屬性很相似,用法也是一樣的。

    var元素
    ?1?????<formset>
    ?2?????????<form?name="/index">
    ?3?????????????<field?property="name"?depends="required">
    ?4?????????????????<arg0?name="required"?key="${var:required}"?resource="false"/>
    ?5?????????????????<var>
    ?6?????????????????????<var-name>required</var-name>
    ?7?????????????????????<var-value>xx</var-value>
    ?8?????????????????</var>
    ?9?????????????</field>
    10?????????</form>
    11?????</formset>


    如果執行了該驗證的話,輸出的結果為:xx is required.







    評論

    # re: Validator驗證框架  回復  更多評論   

    2015-01-23 10:00 by 阿桑地方
    阿桑地方

    # re: Validator驗證框架  回復  更多評論   

    2015-07-14 19:15 by 13
    12313123131
    主站蜘蛛池模板: 亚洲国产一二三精品无码| 亚洲麻豆精品果冻传媒| 午夜亚洲国产成人不卡在线| 国产亚洲人成A在线V网站| 亚洲最大黄色网站| 好吊色永久免费视频大全| 亚洲黄色免费网址| 国产亚洲色视频在线| 本道天堂成在人线av无码免费| 国产大片线上免费观看| 亚洲精品蜜桃久久久久久| 两个人看的www视频免费完整版| 日韩成全视频观看免费观看高清| 亚洲AV成人片色在线观看高潮 | 亚洲国产精品一区二区第一页 | 免费大黄网站在线看| 亚洲色图黄色小说| 亚洲人成在线免费观看| 亚洲Av永久无码精品三区在线| 激情小说亚洲色图| 大地资源免费更新在线播放| 亚洲一区二区三区四区在线观看 | 亚洲午夜福利在线视频| 亚洲免费视频在线观看| 亚洲伊人久久综合中文成人网 | 无码的免费不卡毛片视频| 女人18特级一级毛片免费视频| 久久精品国产亚洲av麻豆色欲| 性xxxxx免费视频播放| 亚洲精品视频在线免费| 久久免费动漫品精老司机| 亚洲一区二区三区在线观看精品中文| 国产亚洲女在线线精品| 99在线精品视频观看免费| 亚洲精选在线观看| 91成人在线免费视频| 亚洲高清日韩精品第一区| 国产免费av片在线播放| 精品在线视频免费| 亚洲欧洲国产日韩精品| 色视频色露露永久免费观看|