信步漫談之Struts2—輸入校驗(XML方式)


主要介紹struts2的XML配置方式輸入校驗,結合實例進行說明。

代碼結構:

image

關鍵代碼:

RegistAction.java
regist.jsp
struts.xml

使用XML方式檢驗需創建一個XML配置文件,位置在對應的Action同級目錄下,命名規則為:Action名-validatioin.xml。

校驗文件可以有兩種寫法,一種是字段校驗,一種是非字段校驗。字段校驗就是以字段為主,在對應字段配置下添加該字段的校驗器,非字段校驗就是先定義好校驗器,在校驗器下添加字段。如下:

RegistAction-validation.xml
RegistAction-validation2.xml

同時字段校驗和非字段校驗這兩種方法也可以混搭使用,即在同一個校驗配置文件中配置這兩種。

校驗器名詞type可選值可以通過查找xwork的jar包下的default.xml,位置在:展開xwork-core-2.3.24.1.jar->com.opensymphony.xwork2.validator.validators.default.xml。

default.xml

文件中name就是校驗器名稱,對應的就是type可選值,class是校驗器對應的實現類,校驗器配置的param參數就是實現類中的屬性。

image

以下是實例程序運行結果:

imageimageimage

image image image

imageimageimage

校驗的執行順序:內置類型轉換->XML校驗器校驗->validateToRegist->validate->toRegist

校驗文件中message的國際化方式:

在Action同級目錄下添加一個ActionName.properties文件,定義key-value,然后,在message標簽的key屬性中填充key值,例如:

imageimageimage

結果如下:

imageimage

這時可以給定義多個ActionName.properties文件以適應瀏覽器使用的不同語言包,例如:ActionName_en_US.properties、ActionName_zh_CN.properties,這樣程序就會根據瀏覽器選擇的語言包自適應提示信息,如果找不到對應語言包的properties文件,將使用默認ActionName.properties的配置。

imageimageimage

運行結果:

imageimageimage

原理解析:

校驗器基類FieldValidatorSupport,是所有校驗器的父類,提供了fieldName和type屬性。

FieldValidatorSupport.class

校驗器stringlength,對應com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator,繼承自FieldValidatorSupport,提供以下屬性可配置:

private boolean trim = true;
private int maxLength = -1;
private int minLength = -1;
private String maxLengthExpression;
private String minLengthExpression;
private String trimExpression;

public void validate(Object object) throws ValidationException {
    String fieldName = getFieldName();
    String val = (String) getFieldValue(fieldName, object);

    if (val == null || val.length() <= 0) {
        // use a required validator for these
        return;
    }
    if (isTrim()) {
        val = val.trim();
        if (val.length() <= 0) {
            // use a required validator
            return;
        }
    }

    int minLengthToUse = getMinLength();
    int maxLengthToUse = getMaxLength();

    if ((minLengthToUse > -1) && (val.length() < minLengthToUse)) {
        addFieldError(fieldName, object);
    } else if ((maxLengthToUse > -1) && (val.length() > maxLengthToUse)) {
        addFieldError(fieldName, object);
    }
}

默認trim為true,即校驗字符串類型時默認去除前后空格,maxLength和minLength默認值-1,不判斷最大最小長度。

由此可見,通過繼承FieldValidatorSupport類,我們也可以自定義校驗器,從而實現更符合我們業務邏輯的校驗。

另外在校驗過程中還要注意一些問題:
多方法Action情況如何使用配置文件進行校驗?
Action可能會有多個方法,例如我們上面的toRegist,如果存在多方法的情況下,需要進行校驗的信息肯定是不一樣的,一個配置文件肯定解決不了問題,所有在多方法需要校驗的情況下,我們需要在Action同級別的目錄下,創建命名規則如下的配置文件:ActionName-method-validation.xml 配置文件,比如:RegisterAction中有個toRegist()方法需要校驗,可以創建RegisterAction-toRegist-validation.xml 配置文件進行配置,這個文件就會針對toRegist()方法進行校驗,但是需要注意的是:在調用toRegist()方法時,使用RegisterAction-toRegist-vaidation.xml文件進行校驗后,還會調用RegisterAction-vaidation.xml 文件進行校驗(這點和編碼方式校驗中validate和validateToRegist有些相似),這樣的話,肯定會產生干擾,為了解決這樣問題,可以在開發過程中,不提供RegisterAction-validtion.xml 這樣的文件,對於execute()方法,可以提供一個RegisterAction-execute-validation.xml 文件進行配置校驗。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM