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

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

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

    posts - 241,  comments - 116,  trackbacks - 0

    準備工作

    1. 登陸頁面的表單:

    <s:fielderror />
    <s:form id="loginForm" name="loginForm" method="post" namespace="/validate" action="validateAction_login.action" theme="simple">
         用戶名: <s:textfield name="username" /><br>
        密&nbsp;&nbsp;碼: <s:textfield name="password" /><br>
        年&nbsp;&nbsp;齡: <s:textfield name="age" /><br>
        <s:submit value="login" /><br>
    </s:form>

    2. 定義校驗規則:

    用戶名不能為null,  或者空字符串;

    密碼不能為null或者空字符串,  密碼中只能包含[0-9a-zA-Z],  不能存在非法字符,  且長度在6-8位之間;

    年齡必須為整型,  且不能為負數.

    采用基本驗證的方式校驗表單

    1. 創建ValidateAction類,  繼承ActionSupport并實現Validateable接口.

    public class ValidateAction extends ActionSupport implements Validateable {
        private String username;
        private String password;
        private Integer age;

        public String login() {
            return "success";
        }

        @Override
        public void validate() {
            if (username == null || "".equals(username.trim())) {
                this.addFieldError("username",  "用戶名不能為空");
            }
            if (password == null || "".equals(password.trim())) {
                this.addFieldError("password",  "密碼不能為空");
            } else if (!password.matches("[0-9a-zA-Z]{6, 8}")) {
                this.addFieldError("password",  "密碼的長度應該在6-8位之間");
            }
            if (age < 0 ) {
                this.addFieldError("age",  "年齡不能為負數");
            }
        }
        // 省略getter和setter方法
    }

    validate()方法在業務方法之前執行. 通過查看底層源代碼可以獲知,  this.addFieldError(String fieldName,  String errorMessage)方法最終將在ValidationAwareSupport類的fieldErrors成員中添加一條記錄 (fieldErrors是一個Map<String,  List<String>>集合). validate()方法執行完成之后,  如果fieldErrors集合中不包含錯誤信息,  表示校驗通過,  接下來將執行login方法. 否則表示校驗沒有通過,  不再執行login()方法.

    默認情況下,  validate()方法將對所有的業務方法進行驗證,  如果只想驗證login()方法,  將validate()改名為validateLogin()即可.

    2. 配置ValidateAction:

    <action name="validateAction_*" class="cn.xing.validate.ValidateAction" method="{1}">
        <result name="success">/validate/success.jsp</result>
        <result name="input">/validate/login.jsp</result>
    </action>

    表單校驗的執行流程

    1. 類型轉換器對請求參數執行類型轉換, 并把轉換后的值賦給action中的屬性. 

    2. 如果在執行類型轉換的過程中出現異常, 系統會將異常信息保存到ActionContext, conversionError攔截器將異常信息封裝到fieldErrors里, 然后執行第3步. 如果類型轉換沒有出現異常, 則直接進入第3步. 

    3. 系統通過反射技術調用action中的validateXxx()方法, Xxx為方法名. 

    4. 調用action中的validate()方法. 

    5. 經過上面4步, 如果系統中的fieldErrors存在錯誤信息(即存放錯誤信息的集合的size大于0), 系統自動將請求轉發至名稱為input的視圖. 如果系統中的fieldErrors沒有任何錯誤信息, 系統將執行action中的業務方法. 

    欠款

     

    基于XML配置方式實現輸入校驗

    1. 創建Action類, 繼承ActionSupport或實現Validateable接口:

    public class ValidateXmlAction extends ActionSupport implements Validateable {
        private String username;
        private String password;
        private Integer age;

        public String login() {
            System.out.println("login");
            return "success";
        }

        // 省略getter和setter方法
    }
    2. 配置ValidateXmlAction:
    <action name="validateXmlAction_*" class="cn.xing.validate.ValidateXmlAction" method="{1}">
                <result name="success">/validate/success.jsp</result>
                <result name="input">/validate/loginxml.jsp</result>
    </action>
    3. 在ValidateXmlAction的同級目錄中創建用于校驗表單的xml文件, 文件名為ValidateXmlAction-validation.xml(用于校驗表單的xml文件的文件名規定為ActionClassName- validation.xml):
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC
              "-//OpenSymphony Group//XWork Validator 1.0.3//EN"
              "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
    <validators>
        <!--
            field:表示驗證的字段名稱, 對應的值是訪問的action中的屬性. 這里是ValidateXmlAction中的username屬性
        -->
        <field name="username">
            <!--
                field-validator表示字段校驗器, type屬性指定使用的校驗規則
            -->
            <field-validator type="requiredstring">
                <!-- 調用RequiredStringValidator中setTrim(true) -->
                <param name="trim">true</param>
                <!-- 給出錯誤提示信息 -->
                <message><![CDATA[用戶名不能為空!!!]]></message>
            </field-validator>
        </field>

        <field name="password">
            <field-validator type="requiredstring">
                <param name="trim">true</param>
                <message><![CDATA[密碼不能為空!!!]]></message>
            </field-validator>
            <field-validator type="regex">
                <param name="expression"><![CDATA[^[a-zA-Z0-9]+$]]></param>
                <message><![CDATA[密碼中不能包含非法字符]]></message>
            </field-validator>
            <field-validator type="regex">
                <param name="expression"><![CDATA[^[a-zA-Z0-9]{6,8}$]]></param>
                <message><![CDATA[密碼的長度應該在6-8位之間]]></message>
            </field-validator>
        </field>

        <field name="age">
            <field-validator type="ageValidate">
                <message><![CDATA[年齡不能為負數!!!]]></message>
            </field-validator>
        </field>
    </validators><span style="white-space: normal; background-color: #ffffff;">&nbsp;</span>

    4. 上述xml文件中使用名稱為ageValidate的校驗規則對age字段進行校驗. ageValidate是一個自定義的校驗規則.

    自定義校驗規則首先需要創建一個類, 繼承FieldValidatorSupport類:

    public class AgeValidate extends FieldValidatorSupport {
        /**
         * @param object: 是Action對象, 其中封裝了待驗證的字段. 此例中object為ValidateXmlAction對象
         */
        public void validate(Object object) throws ValidationException {
            // 獲取需要驗證的字段的名稱
            String fielsName = this.getFieldName();
            // 獲取該字段的值
            Object value = this.getFieldValue(fielsName, object);
            // 判斷表單提交的該字段的值是否為整型
            if (value instanceof Integer) {
                Integer ivalue = (Integer) value;
                if (ivalue < 0) {
                    // 增加錯誤信息到fieldError集合中
                    this.addFieldError(fielsName, object);
                }
            }
        }
    }
    接下來需要注冊上述自定義的校驗規則. 在src下創建 validators.xml文件(文件名稱固定):
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
        <validators>
        <!-- 注冊自定義的驗證器 -->
        <validator name="ageValidate" class="cn.xing.validate.AgeValidate"></validator>
    </validators>
    5. 默認情況下將對Action中的所有業務方法進行校驗. 如果只想對Action中的某個業務方法進行校驗, 可以將用于校驗的xml文件命名為ActionClassName-ActionName_methodName-validation.xml. 本例中只對login()方法進行校驗, 只需將ValidateXmlAction-validation.xml文件更名為ValidateXmlAction- validateXmlAction_login-validation.xml即可.
    posted on 2011-11-21 09:55 墻頭草 閱讀(1355) 評論(1)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    人人游戲網 軟件開發網 貨運專家
    主站蜘蛛池模板: 亚洲欭美日韩颜射在线二| 亚洲精品国精品久久99热一| 24小时日本在线www免费的| 亚洲欧洲自拍拍偷午夜色无码| 男人和女人高潮免费网站| 精品免费视在线观看| 亚洲成av人在线视| 免费国产叼嘿视频大全网站| 久久夜色精品国产亚洲AV动态图| 久久精品国产亚洲AV忘忧草18| 无遮挡呻吟娇喘视频免费播放| 免费观看国产小粉嫩喷水| 亚洲精品综合久久中文字幕| 97视频免费观看2区| 亚洲视频一区网站| 青娱乐免费在线视频| 亚洲乱码中文字幕综合| 热久久这里是精品6免费观看| 四虎永久免费影院| 国产成人精品免费大全| 亚洲免费网站观看视频| 国产成人无码综合亚洲日韩| 免费A级毛片av无码| 亚洲日日做天天做日日谢| 日韩免费在线视频| 亚洲综合av永久无码精品一区二区| 丝瓜app免费下载网址进入ios| 久久久久亚洲AV成人无码网站| 国产精品爱啪在线线免费观看| 亚洲成在人线在线播放无码 | 91高清免费国产自产| JLZZJLZZ亚洲乱熟无码| 成人爽a毛片免费| 亚洲精品乱码久久久久久自慰| 久久免费的精品国产V∧| 亚洲精品一卡2卡3卡四卡乱码| 性感美女视频免费网站午夜| 一级做a毛片免费视频| 亚洲国产精品一区二区久| www.亚洲精品| 老湿机一区午夜精品免费福利|