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

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

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

    隨筆-61  評論-159  文章-0  trackbacks-0
              在struts2中如果action繼承ActionSupport,就可以重寫public void validate() 方法,如果是想校驗某個方法則如下:
    public String login() throws Exception {....................};則校驗方法為public void validateLogin() ,也就是validate+要被校驗的方法名(注意頭字母要大寫),這樣就可以實現所謂的服務器端的字段校驗。
             struts2給我們提供了一個功能比較強大的validation校驗框架。
             以下介紹struts2校驗框架的使用:
             在一個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類的同一個包里面加入相關RegisterAction-validation.xml文件,命名規則為:action名-validation.xml

            首先要些校驗框架的的xml文件先從xml文件的dtd入手,用firefox或者chrome打開dtd(IE不可以正常打開),地址為:http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd,以下是校驗框架的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一些資料即可。

    通過校驗框架的dtd的規范來寫校驗框架的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>

    其中校驗框架的xml配置文件里面的一些參數不是隨意的,是根據以下類里面來的
     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就是此類中的一個聲明布爾類型的變量。

    2、校驗框架中的stringLength,對應的類是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文件里面的兩個minLengthmaxLength對應的怪了中聲明的兩個變量對應,其中xml中的${minLength}${maxLength}就是調用類中的getter方法。
    總結:xml文件中其他屬性,比如required、date等也可以通過以上的方法來分析,就清楚整個校驗框架的原理,使用就很簡單啦。

    PS:現在使用的是field校驗,是field錯誤級別,詳細參考:struts2中action和field級別錯誤處理


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

    評論:
    # re: 深入struts2中validation校驗框架的原理和使用(一) 2008-12-01 11:13 | 楊愛友
    這個validation干嘛用的?能不能舉個具體例子?  回復  更多評論
      
    # re: 深入struts2中validation校驗框架的原理和使用(一)[未登錄] 2009-01-01 12:06 | apple0668
    validation,主要是在服務器端對數據進行校驗的。  回復  更多評論
      
    主站蜘蛛池模板: 国产精品亚洲专区无码不卡| A级毛片内射免费视频| 久久亚洲精品11p| 精品亚洲国产成AV人片传媒| 国产亚洲精品a在线观看| 麻豆国产人免费人成免费视频| 久艹视频在线免费观看| 一级做a毛片免费视频| 国产精品亚洲一区二区三区 | 亚洲AV无码一区二区大桥未久| 久久久久亚洲精品无码蜜桃| 亚洲精品白浆高清久久久久久| 国产一区二区视频免费| 在线不卡免费视频| 成年男女男精品免费视频网站| 国产h视频在线观看网站免费| 日韩免费的视频在线观看香蕉| 91免费在线视频| 日本免费A级毛一片| 免费在线观影网站| 亚洲免费人成在线视频观看| 97无码人妻福利免费公开在线视频| 中国videos性高清免费| 中文毛片无遮挡高清免费| fc2免费人成在线| 国产福利在线观看永久免费| 国产精品1024在线永久免费 | 亚洲人色大成年网站在线观看| 国产精品极品美女自在线观看免费 | 久久久久亚洲AV成人片| 久久亚洲精品AB无码播放| 自拍偷自拍亚洲精品被多人伦好爽| 久久久久亚洲AV综合波多野结衣| 亚洲另类少妇17p| 不卡精品国产_亚洲人成在线| 在线亚洲精品自拍| 亚洲国产成人一区二区精品区| 亚洲av日韩av无码| 亚洲欧洲视频在线观看| 狠狠色香婷婷久久亚洲精品| 亚洲精品无码专区在线播放|