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

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

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

    posts - 431,  comments - 344,  trackbacks - 0
    驗證框架
    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 接口,它有抽象類可供直接使用如 ValidatorSupport FieldValidatorSupport 等。
    驗證類型在使用之前,必須要在 ValidatorFactory com.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 )中取得,一般是 Action Model 對象。例如:我們的字段“ user.age ”,它會通過 Action getUser().getAge() 來取得用戶輸入的年齡,再來根據驗證的類型“ int ”和最大值最小值的參數來判斷輸入的數據是否能通過驗證。
    4 )、不管驗證是否通過,我們的 Action 都會執行,但如果驗證沒有通過,它不會調用 Action execute() 方法。
     
    4、   顯示 Action 的驗證錯誤信息
    如果用戶輸入的數據驗證沒有通過,我們需重新返回輸入頁面,并給出錯誤信息提示。攔截器棧“ validationWorkflowStack ”為我們實現了這個功能。它首先驗證用戶輸入的數據,如果驗證沒有通過將不執行我們 Action execute() 方法,而是將請求重新返回到輸入頁面。
    我們的 xwork.xml 配置文件如下:
    <action name="registerSupport" class="example.register.RegisterActionSupport">
                <result name="success" type="dispatcher">
                    <param name="location">/register-result.jsp</param>
                </result>
                <result name="input" type="dispatcher">
                    <param name="location">/registerSupport.jsp</param>
                </result>
                <interceptor-ref name="validationWorkflowStack"/>
            </action>
     
    通過接口 ValidationAware 我們可以獲得類級別或字段級別的驗證錯誤信息,這個錯誤信息也就是我們驗證文件中 <message> 標簽里的數據。 ActionSupport 類已實現了此接口,這樣在應用中我們的 Action 只要繼承 ActionSupport 類就可以了。 RegisterActionSupport .java 代碼如下:
    package example.register;
     
    import com.opensymphony.xwork.ActionSupport;
     
    public class RegisterActionSupport extends ActionSupport {
     
        private User user= new User();
        private String verifyPassword;
       
        public User getUser(){
            returnthis.user;
        }
       
        public String execute(){
            // 在這里調用用戶注冊的業務邏輯,比如:將注冊信息存儲到數據庫
            return SUCCESS;
        }
     
        public String getVerifyPassword(){
            returnthis.verifyPassword;
        }
       
        publicvoid setVerifyPassword(String verPassword){
            this.verifyPassword = verPassword;
        }
    }
    我們 WebWork UI 標簽庫直接提供了驗證錯誤信息顯示功能。如果字段級別的驗證沒有通過,它會在輸入框上方顯示驗證文件定義的錯誤提示信息。我們將用戶輸入的頁面更改如下:
    registerSupport.jsp
    <%@ taglib uri="webwork" prefix="ww" %>
    <html>
    <head><title>Register Example</title></head>
    <body>
    <table border=0 width=97%>
    <tr><td align="left">
        <ww:form name="'test'" action="'/example/registerSupport.action'" method="'POST'">
                <ww:textfield label="'Username'" name="'user.username'" required="true"/>
                <ww:textfield label="'Password'" name="'user.password'" required="true"/>
                <ww:textfield label="'VerifyPassword'" name="'verifyPassword'" required="true"/>
                <ww:textfield label="'Email'" name="'user.email'" required="true"/>
                <ww:textfield label="'Age'" name="'user.age'" required="true"/>
                <ww:submit value="'Submit'"/>
             </ww:form>
    </td></tr>
    </table>
    </body>
    </html>
    我們上面的例子使用的是服務器端驗證。 WebWork 也為我們提供了方便的客戶端驗證。它將驗證自動生成 JavaScript 腳本。如果要使用客戶端驗證只需改變相應的驗證類型就可以了(輸入頁面的表單必需使用 <ww:form> 標簽,并設置屬性“ validate="true" ”)。具體的驗證類型可以在 WebWork 的包 com.opensymphony.webwork.validators 中找到。
    posted on 2006-12-14 19:13 周銳 閱讀(274) 評論(0)  編輯  收藏 所屬分類: Webwork
    主站蜘蛛池模板: 亚洲国产成人91精品| 久久久高清免费视频| 亚洲综合激情五月丁香六月| 人人狠狠综合久久亚洲88| 国产成人高清精品免费软件| 无码精品人妻一区二区三区免费看| 一级毛片免费观看不收费| 在线观看日本亚洲一区| 亚洲精品福利在线观看| 亚洲人成在线播放网站| 亚洲av高清在线观看一区二区| 岛国av无码免费无禁网站| 免费h片在线观看网址最新| 日韩精品免费视频| 中国一级特黄高清免费的大片中国一级黄色片| 亚洲精品无码国产片| 亚洲精品在线免费看| 久久久亚洲AV波多野结衣| 亚洲国产精品一区二区久久hs| 久久久精品国产亚洲成人满18免费网站 | 久久国产精品萌白酱免费| 亚洲日韩看片无码电影| 亚洲视屏在线观看| 亚洲综合一区二区国产精品| 亚洲va中文字幕无码久久| 亚洲人成网站在线播放vr| 亚洲午夜爱爱香蕉片| 亚洲精品视频免费观看| 亚洲成a人在线看天堂无码| 国产一级高清视频免费看| 日韩免费a级在线观看| 精品免费国产一区二区三区| 天天看免费高清影视| 精品国产免费观看一区| 成人无遮挡裸免费视频在线观看| 久久久久久免费视频| 最近中文字幕无免费视频| 日韩黄色免费观看| 国产午夜鲁丝片AV无码免费| 国产18禁黄网站免费观看| 亚洲国产精品成人久久蜜臀|