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

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

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

    Vincent

    Vicent's blog
    隨筆 - 74, 文章 - 0, 評(píng)論 - 5, 引用 - 0
    數(shù)據(jù)加載中……

    WebWork教程-validator

    驗(yàn)證框架
    WebWork 提供了在 Action 執(zhí)行之前,對(duì)輸入數(shù)據(jù)的驗(yàn)證功能,它使用了其核心 XWork 的驗(yàn)證框架。提供了如下功能:
    1、?? 可配置的驗(yàn)證文件。它的驗(yàn)證文件是一個(gè)獨(dú)立的 XML 配置文件,對(duì)驗(yàn)證的添加、修改只需更改配置文件,無需編譯任何的 Class
    2、?? 驗(yàn)證文件和被驗(yàn)證的對(duì)象完全解藕。驗(yàn)證對(duì)象是普通的 JavaBean 就可以了(可以是 FormBean 、域?qū)ο蟮龋鼈儾恍鑼?shí)現(xiàn)任何額外的方法或繼承額外的類。
    3、?? 多種不同的驗(yàn)證方式。因?yàn)樗?yàn)證功能是可以繼承的,所以可以用多種不同的方式指定驗(yàn)證文件,比如:通過父類的 Action 、通過 Action 、通過 Action 的方法、通過 Action 所使用的對(duì)象,等等。
    4、?? 強(qiáng)大的表達(dá)式驗(yàn)證。它使用了 OGNL 的表達(dá)式語言,提供強(qiáng)大的表達(dá)式驗(yàn)證功能。
    5、?? 同時(shí)支持服務(wù)器端和客戶端驗(yàn)證。
    下面我們來看看如何為用戶注冊(cè)添加驗(yàn)證功能:
    1、?? 注冊(cè)我們的驗(yàn)證類型
    WebWork 為不同的驗(yàn)證要求提供不同的驗(yàn)證類型。一個(gè)驗(yàn)證類型,一般是有一個(gè)類來提供。這個(gè)類必須實(shí)現(xiàn)接口: com.opensymphony.xwork.validator.Validator ,但我們?cè)趯懽约旱尿?yàn)證類型時(shí),無需直接實(shí)現(xiàn) Validator 接口,它有抽象類可供直接使用如 ValidatorSupport FieldValidatorSupport 等。
    驗(yàn)證類型在使用之前,必須要在 ValidatorFactory com.opensymphony.xwork.validator . ValidatorFactory )中 注冊(cè)。可以有二種方法實(shí)現(xiàn)驗(yàn)證類型的注冊(cè)。一、寫程序代碼進(jìn)行注冊(cè),它使用 ValidatorFactory 類的靜態(tài)方法: registerValidator(String name, String className) 二、使用配置文件 validators.xml 進(jìn)行注冊(cè),要求把文件 validators.xml 放到 ClassPath 的跟目錄中( /WEB-INF/classes )。但在實(shí)際開發(fā)中,一般都使用第二中注冊(cè)方法。我們的驗(yàn)證類型注冊(cè)如下:
    <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>
    注冊(cè)驗(yàn)證類型的配置文件非常簡(jiǎn)單。它使用標(biāo)簽 <validator > 提供名-值對(duì)的形式注冊(cè)。這樣我們的驗(yàn)證文件就可以直接引用它的名字。
    2、?? 開啟 Action 的驗(yàn)證功能
    ? 如果 Action 要使用驗(yàn)證框架的驗(yàn)證功能,它必須在配置文件中指定攔截器“ validation ”,它的定義如下:
    <interceptor name="validation" class="com.opensymphony.xwork.validator.ValidationInterceptor"/>
    我們的驗(yàn)證文件必須以 ActionName-validation.xml 格式命名,它必須被放置到與這個(gè) Action 相同的包中。你也可以為這個(gè) Action 通過別名的方式指定驗(yàn)證文件,它的命名格式為: ActionName-aliasname-validation.xml 。“ ActionName ”是我們 Action 的類名;“ aliasname ”是我們?cè)谂渲梦募?/span> xwork.xml )中定義這個(gè) Action 所用到的名稱。這樣,同一個(gè) Action 類,在配置文件中的不同定義就可以對(duì)應(yīng)不同的驗(yàn)證文件。驗(yàn)證框架也會(huì)根據(jù) Action 的繼承結(jié)構(gòu)去查找 Action 的父類驗(yàn)證文件,如果找到它會(huì)去執(zhí)行這個(gè)父類的驗(yàn)證。
    ?
    3、?? 實(shí)現(xiàn)我們的驗(yàn)證文件: 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 > 標(biāo)簽代表一個(gè)字段,它的屬性“ name ”和頁面輸入框的“ name ”屬性必需完全一致,其實(shí)它也就是我們的表達(dá)式語言。
    2 )、 <field-validator > 標(biāo)簽定義我們的驗(yàn)證規(guī)則, type 屬性的值就是就是我們前面定義的驗(yàn)證類型。
    3 )、驗(yàn)證文件中,字段的數(shù)據(jù)是通過表達(dá)式語言從我們的值堆棧( OgnlValueStack )中取得,一般是 Action Model 對(duì)象。例如:我們的字段“ user.age ”,它會(huì)通過 Action getUser().getAge() 來取得用戶輸入的年齡,再來根據(jù)驗(yàn)證的類型“ int ”和最大值最小值的參數(shù)來判斷輸入的數(shù)據(jù)是否能通過驗(yàn)證。
    4 )、不管驗(yàn)證是否通過,我們的 Action 都會(huì)執(zhí)行,但如果驗(yàn)證沒有通過,它不會(huì)調(diào)用 Action execute() 方法。
    ?
    4、?? 顯示 Action 的驗(yàn)證錯(cuò)誤信息
    如果用戶輸入的數(shù)據(jù)驗(yàn)證沒有通過,我們需重新返回輸入頁面,并給出錯(cuò)誤信息提示。攔截器棧“ validationWorkflowStack ”為我們實(shí)現(xiàn)了這個(gè)功能。它首先驗(yàn)證用戶輸入的數(shù)據(jù),如果驗(yàn)證沒有通過將不執(zhí)行我們 Action execute() 方法,而是將請(qǐng)求重新返回到輸入頁面。
    我們的 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 我們可以獲得類級(jí)別或字段級(jí)別的驗(yàn)證錯(cuò)誤信息,這個(gè)錯(cuò)誤信息也就是我們驗(yàn)證文件中 <message> 標(biāo)簽里的數(shù)據(jù)。 ActionSupport 類已實(shí)現(xiàn)了此接口,這樣在應(yīng)用中我們的 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(){
    ??????? // 在這里調(diào)用用戶注冊(cè)的業(yè)務(wù)邏輯,比如:將注冊(cè)信息存儲(chǔ)到數(shù)據(jù)庫
    ??????? return SUCCESS;
    ??? }
    ?
    ??? public String getVerifyPassword(){
    ??????? returnthis.verifyPassword;
    ??? }
    ???
    ??? publicvoid setVerifyPassword(String verPassword){
    ??????? this.verifyPassword = verPassword;
    ??? }
    }
    我們 WebWork UI 標(biāo)簽庫直接提供了驗(yàn)證錯(cuò)誤信息顯示功能。如果字段級(jí)別的驗(yàn)證沒有通過,它會(huì)在輸入框上方顯示驗(yàn)證文件定義的錯(cuò)誤提示信息。我們將用戶輸入的頁面更改如下:
    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>
    我們上面的例子使用的是服務(wù)器端驗(yàn)證。 WebWork 也為我們提供了方便的客戶端驗(yàn)證。它將驗(yàn)證自動(dòng)生成 JavaScript 腳本。如果要使用客戶端驗(yàn)證只需改變相應(yīng)的驗(yàn)證類型就可以了(輸入頁面的表單必需使用 <ww:form> 標(biāo)簽,并設(shè)置屬性“ validate="true" ”)。具體的驗(yàn)證類型可以在 WebWork 的包 com.opensymphony.webwork.validators 中找到。

    posted on 2006-09-01 13:40 Binary 閱讀(685) 評(píng)論(0)  編輯  收藏 所屬分類: Webwork


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 51精品视频免费国产专区| 亚洲精品中文字幕乱码三区 | 久久久无码精品亚洲日韩软件| 最近2022中文字幕免费视频| 一区二区3区免费视频| 亚洲1234区乱码| 亚洲2022国产成人精品无码区| 亚洲午夜爱爱香蕉片| 在线不卡免费视频| 午夜性色一区二区三区免费不卡视频| 两个人看的www高清免费视频| 免费无码午夜福利片69| 亚洲美国产亚洲AV| 亚洲日韩国产精品乱-久| 亚洲色图视频在线观看| 亚洲av无码国产精品色午夜字幕| 亚洲国产精品自产在线播放| 在线免费观看国产视频| 成年在线网站免费观看无广告| 免费福利网站在线观看| 最近2018中文字幕免费视频| 久久国产精品成人免费| 国产在线观看xxxx免费| 中文在线观看永久免费 | 亚洲黄片毛片在线观看| 免费在线看片网站| 亚洲国产精品丝袜在线观看| 国产又长又粗又爽免费视频| 日本免费人成视频播放| 免费看国产精品麻豆| 国产91在线免费| 伊在人亚洲香蕉精品区麻豆| 亚洲AV伊人久久青青草原| 亚洲AV无码一区二区三区在线观看| 国产精品va无码免费麻豆| 日韩在线天堂免费观看| 波多野结衣免费视频观看| 亚洲AV无码乱码在线观看性色扶| 亚洲欧洲国产成人综合在线观看 | 亚洲AV色吊丝无码| 2017亚洲男人天堂一|