struts2:數據校驗,通過XWork校驗框架實現(validation.xml)


根據輸入校驗的處理場所的不同,可以將輸入校驗分為客戶端校驗和服務器端校驗兩種。服務器端驗證目前有兩種方式:

第一種:

參考:struts2:數據校驗,通過Action中的validate()方法實現校驗,圖解

第二種:

使用validate()方法校驗時,如果Web應用中存在大量Action就需要多次重寫validate()方法,這使得代碼非常繁瑣。由於Struts2的校驗框架本質上是基於XWork的validato框架,因此可以使用XWork的validator框架來對Struts2進行數據校驗,以減少代碼量。本文即討論此種校驗方式。

1. 前台頁面加入錯誤提示標簽(registerX.jsp)

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page isELIgnored="false"%>
<%@ taglib uri="/struts-tags" prefix="s"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
    </head>
    <body>
        <s:fielderror/>
        <s:form action="registerX" method="post">
            賬號:<s:textfield name="username"></s:textfield>
            <br/>
            密碼:<s:password name="password"></s:password>
            <br/>
            重復密碼:<s:password name="repassword"></s:password>
            <br/>
            年齡:<s:textfield name="age"></s:textfield>
            <br/>
            身高:<s:textfield name="height"></s:textfield>
            <br/>
            <s:submit value="提交"></s:submit>
            <br/>
        </s:form>
    </body>
</html>

2.  后台action繼承ActionSupport(RegisterXAction.java)

package com.clzhang.ssh.demo1;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterXAction extends ActionSupport {
    public static final long serialVersionUID = 1;

    private String username;
    private String password;
    private String repassword;
    private Integer age;
    private Double height;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getRepassword() {
        return repassword;
    }
    public void setRepassword(String repassword) {
        this.repassword = repassword;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Double getHeight() {
        return height;
    }
    public void setHeight(Double height) {
        this.height = height;
    }

    @Override
    public String execute() {
        System.out.println(username + "|" + age + "|" + height + " register finished!");
        
        return "register";
    }
}

3. 增加校驗配置文件(RegisterXAction-validation.xml)

3.1 命名規范

校驗文件命名規則:ActionName-validation.xml,其中ActionName就是需要校驗的action的類名。

如果需要在Action中對某個特定的方法進行校驗,則需要為此特定方法專門定義一個校驗文件(否則,調用默認的)。該文件命名規則為:actionNme-methodNae-validation.xml;同時,還需要在struts.xml文件配置action時指定其method屬性(否則,調用默認的)。

3.2 位置規范

該文件應該與action類的文件位於同一個路徑下。

3.3 該文件的定義

參考:struts-2.3.x\lib\xwork-core-2.3.x.jar包中xwork-validator-1.0.x.dtd文件的描述。

3.4 該文件中validator的種類

參考:xwork-core-2.3.x.jar\com\opensymphony\xwork2\validator\validators中的default.xml文件。

3.5 進行數據校驗遵循的步驟

  • Struts2框架中的類型轉換器對HTTP請求的數據進行數據類型轉換,得到符合類型的值,比如本例中age被轉換為int。
  • 使用Struts2的XWork校驗框架進行校驗,即根據actionName-validation.xml文件和actionName-methodName-validation.xml文件校驗數據。
  • 調用validateX()方法來進行數據校驗。
  • 調用validate()方法進行數據校驗。
  • 如果數據校驗發生錯誤,就會返回名為input的result,進入指定的視圖資源而不會調用本該被調用的業務邏輯處理方法。如果數據校驗過程中未出現錯誤,則會調用相應Action中的業務邏輯處理方法。

3.6 配置校驗文件的方式

Struts2框架提供了兩種方式來配置校驗文件,一種是字段校驗配置方式;另一種是非字段校驗配置方式。

字段校驗方式(field-validator)

<!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">
            <param name="trim">true</param>
            <message>請輸入用戶名</message>
        </field-validator>
        
        <field-validator type="stringlength">  
            <param name="minLength">2</param>
            <param name="maxLength">16</param>  
            <message>用戶名長度在${minLength}到${maxLength}位之間!</message>  
        </field-validator>
    </field>
    
    <field name="password">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>請輸入密碼</message>
        </field-validator>
        
        <field-validator type="regex">  
            <param name="expression"><![CDATA[\w{6,12}]]></param>  
            <message>密碼必須在6-12位之間,且只能為字母和數字</message>  
        </field-validator>
    </field>

    <field name="repassword">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>請輸入確認密碼</message>
        </field-validator>
        
        <field-validator type="fieldexpression">  
            <param name="expression"><![CDATA[repassword==password]]></param>  <!--這里也可以用repassword.equals(password)//-->
            <message>兩次密碼不相等</message>  
        </field-validator>
    </field>

    <field name="age">
        <field-validator type="required">
            <param name="trim">true</param>
            <message>年齡不能為空!</message>
        </field-validator>

        <field-validator type="int">  
            <param name="min">1</param>
            <param name="max">60</param>  
            <message>年齡取值范圍在${min}到${max}之間</message>  
        </field-validator>
    </field>

    <field name="height">
        <field-validator type="double">  
            <param name="min">1.10</param>
            <param name="max">2.10</param>  
            <message>身高取值范圍在${min}到${max}米之間</message>  
        </field-validator>
    </field>
</validators>

非字段校驗方式(non-fild validator),下面這個只是個示范,非本例所用。

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
    <!-- age域 -->
    <field name="age">
        <!--域類型為int-->
        <field-validator type="int">
            <param name="min">10</param>
            <param name="max">40</param>
            <message>the age must be from 10 to 40!</message>
        </field-validator>
    </field>
    <!-- name域 -->
    <field name="name">
        <!-- 域類型為requiredstring類型 -->
        <field-validator type="requiredstring">        
            <message>the age must be from 10 to 40!</message>
        </field-validator>
    </field>
</validators>
View Code

3.7 校驗器簡介

  • required校驗器,要求字段非空;
  • requiredstring校驗器,要求字段值非空且長度大於0;
  • int校驗器,表示整數,可以通過min/max參數指定范圍;
  • date校驗器,要求日期,可以通過min/max參數指定范圍;
  • email校驗器,要求電子郵件格式;
  • stringlength校驗器,通過minLength/maxLength參數指定字段長度范圍。

4. 在struts.xml文件中配置錯誤返回頁面地址

        <action name="registerX" class="com.clzhang.ssh.demo1.RegisterXAction">
            <result name="register">/ssh/demo1/success.jsp</result>
            <result name="input">/ssh/demo1/registerX.jsp</result>
        </action>

5. 測試

打開IE,輸入地址:http://127.0.0.1:8080/st/ssh/demo1/registerX.jsp

結果如下:

直接提交,結果如下:


免責聲明!

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



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