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

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

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

    最愛Java

    書山有路勤為徑,學海無涯苦作舟

    Struts2學習筆記——輸入校驗(一)

        Struts2提供了基于驗證框架的輸入校驗,在這種校驗方式下,所有的輸入校驗只需要通過指定的配置文件即可。Struts2中每個Action都有一個校驗文件,其規則為:<Action名字>-validation.xml。如:

    package com.struts.test.action;

    import java.util.Date;

    import com.opensymphony.xwork2.ActionSupport;

    public class RegistAction extends ActionSupport {
        
    private static final long serialVersionUID = -2113900523366315993L;
        
        
    //該請求包含的4個請求參數
        private String name;
        
    private String pass;
        
    private int age;
        
    private Date birth;
        
        
        
    public String getName() {
            
    return name;
        }

        
    public void setName(String name) {
            
    this.name = name;
        }

        
    public String getPass() {
            
    return pass;
        }

        
    public void setPass(String pass) {
            
    this.pass = pass;
        }

        
    public int getAge() {
            
    return age;
        }

        
    public void setAge(int age) {
            
    this.age = age;
        }

        
    public Date getBirth() {
            
    return birth;
        }

        
    public void setBirth(Date birth) {
            
    this.birth = birth;
        }

    }

        在類RegistAction.class相同目錄下有RegistAction-validation.xml文件:

    <?xml version="1.0" encoding="GBK"?>
    <!--指定校驗配置文件的DTD信息-->
    <!DOCTYPE validators PUBLIC 
        "-//OpenSymphone GROUP/ /XWork Validator 1.0.2/ /EN"
        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"
    >
    <!--校驗文件的根元素-->
    <validators>
        
    <!--校驗Action的name屬性-->
        
    <field name="name">
            
    <!--指定name屬性必須滿足必填規則-->
            
    <field-validator type="requiredstring">
                
    <param name="trim">true</param>
                
    <message>必須輸入名字</message>
            
    </field-validator>
            
    <!--指定name屬性必須匹配正則表達式-->
            
    <field-validator type="regex">
                
    <param name="expression"><![CDATA[(\w{4,25})]]></param>
                
    <message>您輸入的用戶名只能是字母和數字,且長度必須在4到25之間</message>
            
    </field-validator>
        
    </field>
        
    <!--校驗Action的pass屬性-->
        
    <field name="pass">
            
    <!--指定pass屬性必須滿足必填規則-->
            
    <field-validator type="requiredstring">
                
    <param name="trim">true</param>
                
    <message>必須輸入密碼</message>
            
    </field-validator>
            
    <!--指定pass屬性必須匹配正則表達式-->
            
    <field-validator type="regex">
                
    <param name="expression"><![CDATA[(\w{4,25})]]></param>
                
    <message>您輸入的密碼只能是字母和數字,且長度必須在4到25之間</message>
            
    </field-validator>
        
    </field>
        
    <!--校驗Action的age屬性-->
        
    <field name="age">
            
    <!--指定age屬性必須在指定范圍內-->
            
    <field-validator type="int">
                
    <param name="min">1</param>
                
    <param name="max">150</param>
                
    <message>年齡必須在1到150之間</message>
            
    </field-validator>
        
    </field>
        
    <!--校驗Action的birth屬性-->
        
    <field name="birth">
            
    <!--指定birth屬性必須在指定范圍內-->
            
    <field-validator type="date">
                
    <param name="min">1900-01-01</param>
                
    <param name="max">2050-02-21</param>
                
    <message>生日必須在${min}到${max}之間</message>
            
    </field-validator>
        
    </field>
    </validators>

        增加了這個校驗文件后,系統會自動加載該文件,當用戶提交請求的時候,Struts2的校驗框架會根據該文件對用戶的請求進行校驗。當校驗失敗后,Struts2會自動返回名為input的邏輯視圖。我們可以在視圖中添加<s:fielderror/>來查看所返回的校驗失敗信息。

        上面的校驗中,我們沒有使用國際化,如需國際化,可將message配置成<message key="name.required">這樣的形式。

        上述的校驗是在服務器端進行的,如果需要在客戶端進行校驗,可以將jsp改成struts2的標簽格式,如:

    <html>
        
    <head/>
            
    <!--可以導入一些CSS的樣式-->
        
    <s:head/>  
        
    <body>
                    
    <!--添加validate='true'來進行校驗-->
            
    <s:form action="regist.action" validate="true">
                
    <s:textfield label="用戶名" name="name"/>
                
    <s:textfield label="密碼" name="pass"/>
                
    <s:textfield label="年齡" name="age"/>
                
    <s:textfield label="生日" name="birth"/>
                
    <s:submit/>
            
    </s:form>
        
    </body>
    </html>

        這里需要注意的是,國際化中需要使用<message>${getText("name.required")}</message>這樣的形式。同時,客戶端校驗僅僅支持如下校驗器:

    •     required validator(必填校驗器)
    •     requiredstring validator(必填字符串校驗器)
    •     string length validator(字符串長度校驗器)
    •     regex validator(正則表達式校驗器)
    •     email validator(郵件校驗器)
    •     url validator(網址校驗器)
    •     int validator(整數校驗器)
    •     double validator(雙精度數校驗器)

        Struts2提供了兩種方式來配置校驗規則:字段校驗器和非字段校驗器風格。這兩種風格其實并沒有本質的不同,只是組織校驗規則的方式不同:一種是字段優先,稱為字段校驗器風格;另外一種是校驗器優先,稱為非字段校驗器風格。

        上面的例子RegistAction-validate.xml就是字段優先校驗器風格。如果變成非字段校驗器風格,則如下:

    <?xml version="1.0" encoding="GBK"?>
    <!--指定校驗配置文件的DTD信息-->
    <!DOCTYPE validators PUBLIC 
        "-//OpenSymphone GROUP/ /XWork Validator 1.0.2/ /EN"
        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"
    >
    <!--校驗文件的根元素-->
    <validators>
        
    <validator type="requiredstring">
            
    <param name="fieldName">name</param>
            
    <param name="trim">true</param>
            
    <message>${getText("name.requried")}</message>
        
    </validator>
        
    <validator type="regex">
            
    <param name="fieldName">name</param>
            
    <param name="trim">true</param>
            
    <param name="expression"><![CDATA[(\w{4,25})]]></param>
            
    <message>${getText("name.requried")}</message>
        
    </validator>
        
    </validators>

        上面的校驗操作并沒有使用短路操作,即當我們使用空字符串提交頁面的時候,會發現error信息是:"您必須輸入用戶名! 您輸入的用戶名只能是字母和數字,且長度必須在4到25之間!"。為了達到短路效果,我們可以在<validator.../>元素或<field-validator.../>元素中增加short-curcuit="true"即可。我們在例子中將name和pass的必填校驗器配置成校驗器,那么當必填校驗器失敗后,同一字段的其他校驗器就不會繼續校驗了。

        我們總結一下校驗順序和短路:

        校驗器的執行順序有如下原則:

              所有非字段風格的校驗器優先于字段風格的校驗器

              所有非字段風格的校驗器中,排在前面的會先執行。

              所有字段風格的校驗器中,排在前面的會先執行。

        校驗器短路的原則是:

            所有非字段校驗器是最優先執行,如果某個非字段校驗器校驗失敗了,則該字段上所有字段校驗器都不會獲得校驗的機會。

            非字段校驗器的校驗失敗,不會阻止其他非字段校驗的執行。

            如果一個字段校驗器校驗失敗后,則該字段下的且排在該校驗失敗的校驗器之后的其他字段校驗器不會獲得校驗的機會。

            字段校驗器永遠不會阻止非字段校驗器的執行。

        Strut2的一個Action中可能包含多個處理邏輯,當一個Action類包含多個類似于execute的方法時,每個方法都是一個處理邏輯。不同的處理邏輯需要不同的校驗規則,Struts2也提供了對不同Action指定不同校驗規則的的支持。

        當需要讓一個Action可以處理多個請求時,需要配置多個邏輯的Action,如:


     

            <action name="regist" class="com.struts.test.action.RegistAction">
                
    <result name="input">/regist.jsp</result>
                
    <result name="error">/error.jsp</result>
                
    <result>/show.jsp</result>
            
    </action>

            
    <action name="login" class="com.struts.test.action.RegistAction" method="login">
                
    <result name="input">/login.jsp</result>
                
    <result name="error">/error.jsp</result>
                
    <result>/show.jsp</result>
            
    </action>

       

    posted on 2010-10-24 15:01 Brian 閱讀(354) 評論(0)  編輯  收藏 所屬分類: Struts2

    公告


    導航

    <2010年10月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    統計

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 无码精品人妻一区二区三区免费看 | 相泽亚洲一区中文字幕| 中文字幕乱码亚洲无线三区 | 亚洲成人在线免费观看| 1000部羞羞禁止免费观看视频 | 日韩免费观看一级毛片看看| 亚洲私人无码综合久久网| 91免费精品国自产拍在线不卡| 亚洲午夜电影在线观看| 久久精品免费全国观看国产| 亚洲AV无码精品蜜桃| 成人免费一区二区三区在线观看| 亚洲综合精品伊人久久| 日本xxwwxxww在线视频免费| 国产成人亚洲精品91专区高清| 亚洲高清免费视频| 成人爽a毛片免费| 亚洲国产成人精品无码一区二区 | 最近2019中文字幕免费大全5 | 精品久久久久久亚洲中文字幕| 国产成人免费全部网站| 手机永久免费的AV在线电影网| 亚洲欧洲∨国产一区二区三区| 色猫咪免费人成网站在线观看| 亚洲免费观看在线视频| 国产大片91精品免费观看男同| kk4kk免费视频毛片| 亚洲精品国产成人99久久| 野花高清在线观看免费3中文| 特黄aa级毛片免费视频播放| 中国亚洲女人69内射少妇| 59pao成国产成视频永久免费 | 午夜国产羞羞视频免费网站| 中国内地毛片免费高清| 亚洲的天堂av无码| 午夜亚洲福利在线老司机| 四虎成人精品永久免费AV| 亚洲日韩一区二区三区| 久久久青草青青国产亚洲免观| 69成人免费视频| 久久www免费人成精品香蕉|