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

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

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

    JAVA流通橋

    JAVA啟發者

    統計

    留言簿(3)

    AJAX相關網址

    Eclipse相關網址

    Hibernate

    java相關網址

    LINUX相關網址

    webwork相關網址

    友好鏈接

    閱讀排行榜

    評論排行榜

    驗證框架

    驗證框架

    WebWork提供了在Action執行之前,對輸入數據的驗證功能,它使用了其核心XWork的驗證框架。提供了如下功能:

    1、 可配置的驗證文件。它的驗證文件是一個獨立的XML配置文件,對驗證的添加、修改只需更改配置文件,無需編譯任何的Class

    2、 驗證文件和被驗證的對象完全解藕。驗證對象是普通的JavaBean就可以了(可以是FormBean、域對象等),它們不需實現任何額外的方法或繼承額外的類。

    3、 多種不同的驗證方式。因為它驗證功能是可以繼承的,所以可以用多種不同的方式指定驗證文件,比如:通過父類的Action、通過Action、通過Action的方法、通過Action所使用的對象,等等。

    4、 強大的表達式驗證。它使用了OGNL的表達式語言,提供強大的表達式驗證功能。

    5、 同時支持服務器端和客戶端驗證。

    為用戶注冊添加驗證功能

    下面我們來看看如何為用戶注冊添加驗證功能:

    1、 注冊我們的驗證類型

    WebWork為不同的驗證要求提供不同的驗證類型。一個驗證類型,一般是有一個類來提供。這個類必須實現接口:com.opensymphony.xwork.validator.Validator,但我們在寫自己的驗證類型時,無需直接實現Validator接口,它有抽象類可供直接使用如ValidatorSupportFieldValidatorSupport等。

    驗證類型在使用之前,必須要在ValidatorFactorycom.opensymphony.xwork.validator. ValidatorFactory)中注冊。可以有二種方法實現驗證類型的注冊。一、寫程序代碼進行注冊,它使用ValidatorFactory類的靜態方法:registerValidator(String name, String className)二、使用配置文件validators.xml進行注冊,要求把文件validators.xml放到ClassPath的跟目錄中(/WEB-INF/classes)。但在實際開發中,一般都使用第二中注冊方法。我們的驗證類型注冊如下:

    <validators>

        <validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>

        <validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/>

        <validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>

        <validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>

        <validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>

        <validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>

        <validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/>

        <validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/>

        <validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>

        <validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>

        <validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>

    </validators>

    注冊驗證類型的配置文件非常簡單。它使用標簽<validator>提供名-值對的形式注冊。這樣我們的驗證文件就可以直接引用它的名字。

    2、 開啟Action的驗證功能

     如果Action要使用驗證框架的驗證功能,它必須在配置文件中指定攔截器“validation”,它的定義如下:

    <interceptor name="validation" class="com.opensymphony.xwork.validator.ValidationInterceptor"/>

    我們的驗證文件必須以ActionName-validation.xml格式命名,它必須被放置到與這個Action相同的包中。你也可以為這個Action通過別名的方式指定驗證文件,它的命名格式為:ActionName-aliasname-validation.xml。“ActionName ”是我們Action的類名;“aliasname”是我們在配置文件(xwork.xml)中定義這個Action所用到的名稱。這樣,同一個Action類,在配置文件中的不同定義就可以對應不同的驗證文件。驗證框架也會根據Action的繼承結構去查找Action的父類驗證文件,如果找到它會去執行這個父類的驗證。

     

    3、 實現我們的驗證文件:RegisterActionSupport-validation.xml

    <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">

    <validators>

        <field name="user.username">

        <field-validator type="requiredstring">

                <message>You must enter a value for username.</message>

            </field-validator>

        </field>

        <field name="user.password">

        <field-validator type="requiredstring">

                <message>You must enter a value for password.</message>

            </field-validator>

            <field-validator type="fieldexpression">

                <param name="expression">user.password == verifyPassword</param>

                <message>Passwords don't match.</message>

            </field-validator>

        </field>

        <field name="user.email">

        <field-validator type="email">

                <message>You must enter a valid email.</message>

            </field-validator>

        </field>

        <field name="user.age">

        <field-validator type="int">

                <param name="min">6</param>

                <param name="max">100</param>

                <message>Age must be between ${min} and ${max}, current value is ${user.age}.</message>

            </field-validator>

        </field>

    </validators>

    說明:

    1)、<field>標簽代表一個字段,它的屬性“name”和頁面輸入框的“name”屬性必需完全一致,其實它也就是我們的表達式語言。

    2)、<field-validator>標簽定義我們的驗證規則,type屬性的值就是就是我們前面定義的驗證類型。

    3)、驗證文件中,字段的數據是通過表達式語言從我們的值堆棧(OgnlValueStack)中取得,一般是ActionModel對象。例如:我們的字段“user.age”,它會通過ActiongetUser().getAge()來取得用戶輸入的年齡,再來根據驗證的類型“int”和最大值最小值的參數來判斷輸入的數據是否能通過驗證。

    4)、不管驗證是否通過,我們的Action都會執行,但如果驗證沒有通過,它不會調用Actionexecute()方法。

     

    4、 顯示Action的驗證錯誤信息

    如果用戶輸入的數據驗證沒有通過,我們需重新返回輸入頁面,并給出錯誤信息提示。攔截器棧“validationWorkflowStack”為我們實現了這個功能。它首先驗證用戶輸入的數據,如果驗證沒有通過將不執行我們Actionexecute()方法,而是將請求重新返回到輸入頁面。

    我們的xwork.xml配置文件如下:

    <action name="registerSupport" class="com.test.RegisterActionSupport" >

               <result name="success" type="dispatcher">

                  <param name="location">/registerResult.vm</param>

               </result>

               <result name="input" type="dispatcher">

                  <param name="location">/registerSupport.vm</param>

               </result>

               <interceptor-ref name="validationWorkflowStack"/>

           </action>

     

    通過接口ValidationAware我們可以獲得類級別或字段級別的驗證錯誤信息,這個錯誤信息也就是我們驗證文件中<message>標簽里的數據。ActionSupport類已實現了此接口,這樣在應用中我們的Action只要繼承ActionSupport類就可以了。RegisterActionSupport.java代碼如下:

    package com.test;

     

    import com.opensymphony.xwork.ActionSupport;

     

    public class RegisterActionSupport extends ActionSupport {

     

        private User user= new User();

        private String verifyPassword;

       

        public User getUser(){

           return this.user;

        }

       

        public String execute(){

           //在這里調用用戶注冊的業務邏輯,比如:將注冊信息存儲到數據庫

           return SUCCESS;

        }

     

        public String getVerifyPassword(){

           return this.verifyPassword;

        }

       

        public void setVerifyPassword(String verPassword){

           this.verifyPassword = verPassword;

        }

    }

    我們WebWorkUI標簽庫直接提供了驗證錯誤信息顯示功能。如果字段級別的驗證沒有通過,它會在輸入框上方顯示驗證文件定義的錯誤提示信息。我們將用戶輸入的頁面更改如下:

    registerSupport.vm

    <html>

    <head>

    <title>WebWork Register - Example 4</title>

    <meta name="help-path" content="/help/help5.html"/>

    </head>

    <body>

    <p>Custom Component Example:</p>

     

    <table border=0 width=97%>

    <tr><td align="left">

        #bodytag (form "name='test'" "action='/registerSupport.action'" "method='POST'")

                #tag(textfield "label='Username'" "name='user.username'" "required='true'")

                #tag(textfield "label='Password'" "name='user.password'" "required='true'")

                #tag(textfield "label='VerifyPassword'" "name='verifyPassword'" "required='true'")

                #tag(textfield "label='Email'" "name='user.email'" "required='true'")

                #tag(textfield "label='Age'" "name='user.age'" "required='true'")

                #tag(submit value="'Submit'")

         #end

    </td></tr>

    </table>

    <br/>

    </body>

    </html>

     

    我們上面的相應結果文件registerResult.vm為:

    <html>

    <head><title>WebWork Register - Example 4 - Register result</title></head>

    <body>

        <table border=0 width=97%>

            <tr>

                <td align="left">

                Congratulation,your register success!<p>

                Username:$!user.username<br>

                Password:$!user.password<br>

                Email:$!user.email<br>

                Age:$!user.age<br>

                </td>

            </tr>

        </table>

    </body>

    </html>

     

    我們上面的例子使用的是服務器端驗證。

    posted on 2007-04-12 17:29 朱巖 閱讀(275) 評論(0)  編輯  收藏 所屬分類: webwork文章

    主站蜘蛛池模板: 毛片免费在线观看| 亚洲人色大成年网站在线观看| 99re8这里有精品热视频免费| 亚洲卡一卡2卡三卡4卡无卡三| A级毛片内射免费视频| 黄网站色视频免费观看45分钟| 亚洲AV第一页国产精品| AV片在线观看免费| 三级网站在线免费观看| 亚洲日韩中文字幕一区| 国产AV无码专区亚洲AWWW| 好吊妞在线成人免费| 国产在线国偷精品免费看| 亚洲无码一区二区三区| 亚洲国产香蕉人人爽成AV片久久| 久9热免费精品视频在线观看| 最新亚洲人成无码网www电影| 久久精品国产亚洲av日韩| 亚洲精品高清一二区久久| 成人免费午夜视频| 暖暖免费日本在线中文| 阿v免费在线观看| 国产成A人亚洲精V品无码| 亚洲一级毛片免费在线观看| 四虎成人精品国产永久免费无码| 亚洲国产精品成人综合久久久 | 一二三四在线播放免费观看中文版视频| 国产成人亚洲精品电影| 亚洲国产精品久久人人爱| 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲国产老鸭窝一区二区三区| www.亚洲精品.com| 午夜宅男在线永久免费观看网 | 久久青青草原亚洲av无码| 在线A级毛片无码免费真人| 亚洲一区二区在线免费观看| 黄色毛片免费观看| 亚洲色偷偷综合亚洲av78| 亚洲美女视频一区| 亚洲va在线va天堂va不卡下载| 精品国产香蕉伊思人在线在线亚洲一区二区|