1. 程式人生 > >Struts2之validate資料校驗兩種方式

Struts2之validate資料校驗兩種方式

1.Action中的validate()方法

Struts2提供了一個Validateable介面,這個介面中只存在validate()方法,實現這個介面的類可直接被Struts2呼叫,ActionSupport類就實現了Vadidateable介面,但他的validate()方法是一個空方法,需要我們來重寫。

validate()方法會在execute()方法執行前執行,僅當資料校驗正確,才執行execute()方法, 如錯誤則將錯誤新增到fieldErrors域中,如果定義的Action中存在多個邏輯處理方法,且不同的處理邏輯需要不同的校驗規則,這種情況下validate()會對所有處理邏輯使用相同的校驗規則,為了實現不同的校驗邏輯,需要通過validateX()方法,其中X表示處理邏輯的方法名。

Action類:

public class LoginAction extends ActionSupport{
    private static final long serialVersionUID = 1L;

    private String userName;
    private String userPassword;


    public String execute(){

        System.out.println("execute");
        return SUCCESS;
    }

    public String login
(){ System.out.println("login"); return SUCCESS; } public void validate(){ System.out.println("validata"); } public void validateLogin(){ System.out.println("validatelogin"); if(!(userName.equals("sbw") && userPassword.equals("123"))){ addFieldError("error"
,"wrong info"); } } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } }

struts.xml

<package name="main" extends="struts-default">
        <global-results>
            <result name="login">/login.jsp</result>
        </global-results>

        <action name="loginPerson" class="com.sbw.test.action.LoginAction" method="login">
            <result name="success">/success.jsp</result>
            <result name="input">/validateLogin.jsp</result>
        </action>
    </package>

success.jsp

<body>
    登入成功 <s:property value="account"/>
  </body>

validateLogin.jsp

 <body>
    <s:fielderror/>
  </body>

執行結果(第一次測試正確,第二次測試錯誤)

這裡寫圖片描述
這裡寫圖片描述

這裡寫圖片描述
這裡寫圖片描述

2.通過XWork校驗框架

使用validate方法校驗時,如果Web應用中存在大量Action就需要多次重寫validate方法,因此可以使用XWork的validator框架來對Struts2進行資料校驗,減少程式碼量。

在com.action包下建立驗證檔案LoginAction-validation.xml,注:當一個Action中有多個業務處理方法是,命名規則為:actionName-methodName-validation.xml,其中actionName為Action類名,methodName為Action中某個業務處理方法的方法名,並且檔案的搜尋順序與方式一種validate()和validateX()一樣。

Login-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
    <field name="userName">
        <field-validator type="requiredstring">
            <message>the name should not null</message>
        </field-validator>
    </field>

    <field name="userPassword">
        <field-validator type="requiredstring">
            <message>the password should not null</message>
        </field-validator>
    </field>
</validators>

再次執行結果為:
這裡寫圖片描述

上述欄位校驗方式為欄位校驗方式,還有一種方式是非欄位校驗方式,如下:
Login-validation.xml:

<validators>
    <validator type="requiredstring">
        <param name="fieldName">userName</param>
        <message>name should not null</message>
    </validator>

    <validator type="requiredstring">
        <param name="fieldName">userPassword</param>
        <message>password should not null</message>
    </validator>
</validators>

結果與欄位校驗方式一樣

附:Struts2常用校驗器:

這裡寫圖片描述