隨筆-61  評(píng)論-159  文章-0  trackbacks-0
                    在struts2中如果action繼承ActionSupport,就可以重寫public void validate() 方法,如果是想校驗(yàn)?zāi)硞€(gè)方法則如下:
          public String login() throws Exception {....................};則校驗(yàn)方法為public void validateLogin() ,也就是validate+要被校驗(yàn)的方法名(注意頭字母要大寫),這樣就可以實(shí)現(xiàn)所謂的服務(wù)器端的字段校驗(yàn)。
                   struts2給我們提供了一個(gè)功能比較強(qiáng)大的validation校驗(yàn)框架。
                   以下介紹struts2校驗(yàn)框架的使用:
                   在一個(gè)action中,例如:
           1import java.util.Date;
           2
           3import com.opensymphony.xwork2.ActionSupport;
           4
           5@SuppressWarnings("serial")
           6public class RegisterAction extends ActionSupport {
           7    private String name;
           8    private int age;
           9    private Date birthday;
          10    
          11    @Override
          12    public String execute() throws Exception {
          13        // TODO Auto-generated method stub
          14        return SUCCESS;
          15    }

          16    @Override
          17    
          18    public String getName() {
          19        return name;
          20    }

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

          24    
          25    public int getAge() {
          26        return age;
          27    }

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

          31    public Date getBirthday() {
          32        return birthday;
          33    }

          34    public void setBirthday(Date birthday) {
          35        this.birthday = birthday;
          36    }

          37    
          38}
                  在action類的同一個(gè)包里面加入相關(guān)RegisterAction-validation.xml文件,命名規(guī)則為:action名-validation.xml

                  首先要些校驗(yàn)框架的的xml文件先從xml文件的dtd入手,用firefox或者chrome打開(kāi)dtd(IE不可以正常打開(kāi)),地址為:http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd,以下是校驗(yàn)框架的dtd:
           1<?xml version="1.0" encoding="UTF-8"?>
           2
           3<!--
           4  XWork Validators DTD.
           5  Used the following DOCTYPE.
           6  
           7  <!DOCTYPE validators PUBLIC 
           8          "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
           9          "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
          10-->
          11
          12
          13<!ELEMENT validators (field|validator)+>
          14
          15<!ELEMENT field (field-validator+)>
          16<!ATTLIST field
          17    name CDATA #REQUIRED
          18>
          19
          20<!ELEMENT field-validator (param*, message)>
          21<!ATTLIST field-validator
          22    type CDATA #REQUIRED
          23    short-circuit (true|false) "false"
          24>
          25
          26<!ELEMENT validator (param*, message)>
          27<!ATTLIST validator
          28    type CDATA #REQUIRED
          29    short-circuit (true|false) "false"
          30>
          31
          32<!ELEMENT param (#PCDATA)>
          33<!ATTLIST param
          34    name CDATA #REQUIRED
          35>
          36
          37<!ELEMENT message (#PCDATA)>
          38<!ATTLIST message
          39    key CDATA #IMPLIED
          40>
          PS:看不懂dtd的,google一下dtd一些資料即可。

          通過(guò)校驗(yàn)框架的dtd的規(guī)范來(lái)寫校驗(yàn)框架的xml配置文件,配置文件如下:
           1<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
           2"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
           3<validators>
           4    <field name="name">
           5        <field-validator type="requiredstring">
           6            <param name="trim">true</param>
           7            <message>the name shouldn't be blank!</message>
           8        </field-validator>
           9        <field-validator type="stringlength">
          10            <param name="minLength">5</param>
          11            <param name="maxLength">10</param>
          12            <message>name's length should be between ${minLength} and ${maxLength}!</message>
          13        </field-validator>
          14    </field>
          15    <field name="age">
          16        <field-validator type="required">
          17            <message>age should not be blank!</message>
          18        </field-validator>
          19    
          20        <field-validator type="int">
          21            <param name="min">1</param>
          22            <param name="max">150</param>
          23            <message>age should be between ${min} and ${max}</message>
          24        </field-validator>
          25    </field>
          26    <field name="birthday">
          27        <field-validator type="required">
          28            <message>birthday should not be blank!</message>
          29        </field-validator>
          30        
          31        <field-validator type="date">
          32            <param name="min">2001-01-01</param>
          33            <param name="max">2003-12-31</param>
          34            <message>birthday should be between ${min} and ${max}</message>
          35        </field-validator>
          36    </field>
          37</validators>

          其中校驗(yàn)框架的xml配置文件里面的一些參數(shù)不是隨意的,是根據(jù)以下類里面來(lái)的
           1<?xml version="1.0" encoding="UTF-8"?>
           2<!DOCTYPE validators PUBLIC
           3        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
           4        "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
           5<!-- START SNIPPET: validators-default -->
           6<validators>
           7    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
           8    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
           9    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
          10    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
          11    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
          12    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
          13    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
          14    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
          15    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
          16    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
          17    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
          18    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
          19    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
          20</validators>
          21<!--  END SNIPPET: validators-default -->

           1、先從 requiredstring入手,找到com.opensymphony.xwork2.validator.validators.RequiredStringValidator
           1public class RequiredStringValidator extends FieldValidatorSupport {
           2
           3    private boolean doTrim = true;
           4
           5
           6    public void setTrim(boolean trim) {
           7        doTrim = trim;
           8    }

           9
          10    public boolean getTrim() {
          11        return doTrim;
          12    }

          13
          14    public void validate(Object object) throws ValidationException {
          15        String fieldName = getFieldName();
          16        Object value = this.getFieldValue(fieldName, object);
          17
          18        if (!(value instanceof String)) {
          19            addFieldError(fieldName, object);
          20        }
           else {
          21            String s = (String) value;
          22
          23            if (doTrim) {
          24                s = s.trim();
          25            }

          26
          27            if (s.length() == 0{
          28                addFieldError(fieldName, object);
          29            }

          30        }

          31    }

          32}

          33

          注:其中trim就是此類中的一個(gè)聲明布爾類型的變量。

          2、校驗(yàn)框架中的stringLength,對(duì)應(yīng)的類是com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator

           1public class StringLengthFieldValidator extends FieldValidatorSupport {
           2
           3    private boolean doTrim = true;
           4    private int maxLength = -1;
           5    private int minLength = -1;
           6
           7
           8    public void setMaxLength(int maxLength) {
           9        this.maxLength = maxLength;
          10    }

          11
          12    public int getMaxLength() {
          13        return maxLength;
          14    }

          15
          16    public void setMinLength(int minLength) {
          17        this.minLength = minLength;
          18    }

          19
          20    public int getMinLength() {
          21        return minLength;
          22    }

          23
          24    public void setTrim(boolean trim) {
          25        doTrim = trim;
          26    }

          27
          28    public boolean getTrim() {
          29        return doTrim;
          30    }

          31
          32    public void validate(Object object) throws ValidationException {
          33        String fieldName = getFieldName();
          34        String val = (String) getFieldValue(fieldName, object);
          35
          36        if (val == null || val.length() <= 0{
          37            // use a required validator for these
          38            return;
          39        }

          40        if (doTrim) {
          41            val = val.trim();
          42            if (val.length() <= 0
          43                // use a required validator
          44                return;
          45            }

          46        }

          47
          48        if ((minLength > -1&& (val.length() < minLength)) {
          49            addFieldError(fieldName, object);
          50        }
           else if ((maxLength > -1&& (val.length() > maxLength)) {
          51            addFieldError(fieldName, object);
          52        }

          53    }

          54}

          55
          注:xml文件里面的兩個(gè)minLengthmaxLength對(duì)應(yīng)的怪了中聲明的兩個(gè)變量對(duì)應(yīng),其中xml中的${minLength}${maxLength}就是調(diào)用類中的getter方法。
          總結(jié):xml文件中其他屬性,比如required、date等也可以通過(guò)以上的方法來(lái)分析,就清楚整個(gè)校驗(yàn)框架的原理,使用就很簡(jiǎn)單啦。

          PS:現(xiàn)在使用的是field校驗(yàn),是field錯(cuò)誤級(jí)別,詳細(xì)參考:struts2中action和field級(jí)別錯(cuò)誤處理


          -------------------------------------------------------------------------------------------------
          PS:本博客文章,如果沒(méi)有注明是有“轉(zhuǎn)”字樣,屬于本人原創(chuàng)。如果需要轉(zhuǎn)載,務(wù)必注明作者文章的詳細(xì)出處地址,否則不允許轉(zhuǎn)載,多謝合作!
          posted on 2008-11-28 22:56 apple0668 閱讀(3739) 評(píng)論(2)  編輯  收藏 所屬分類: struts2

          評(píng)論:
          # re: 深入struts2中validation校驗(yàn)框架的原理和使用(一) 2008-12-01 11:13 | 楊愛(ài)友
          這個(gè)validation干嘛用的?能不能舉個(gè)具體例子?  回復(fù)  更多評(píng)論
            
          # re: 深入struts2中validation校驗(yàn)框架的原理和使用(一)[未登錄](méi) 2009-01-01 12:06 | apple0668
          validation,主要是在服務(wù)器端對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)的。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 肃南| 东明县| 察雅县| 高青县| 年辖:市辖区| 柏乡县| 襄城县| 永靖县| 北川| 辽宁省| 射阳县| 上杭县| 塔河县| 衡阳市| 余江县| 阜城县| 宁强县| 资兴市| 武义县| 司法| 玉溪市| 延津县| 潼关县| 忻城县| 柳林县| 珠海市| 滕州市| 金昌市| 绿春县| 衢州市| 古蔺县| 定兴县| 增城市| 吉木萨尔县| 紫金县| 舟曲县| 甘肃省| 宣威市| 盐亭县| 成都市| 治县。|