1. 程式人生 > >Struts2框架的資料驗證

Struts2框架的資料驗證

資料驗證分為客戶端驗證和伺服器端驗證, Struts2框架的驗證屬於伺服器端的驗證

①程式設計式驗證

在動作類中重寫validate():

package com.rl.action;

import org.apache.struts2.interceptor.validation.SkipValidation;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.rl.model.Person;

/**
 * ModelDriven的泛型就是需要接收的物件的類
 * @author Administrator
 *
 */
public class PersonAction1 extends ActionSupport implements ModelDriven<Person>{
    
    /**
     * 必須手動new一個物件
     */
    private Person person = new Person();
    
    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }

    public String save(){
        System.out.println(person);
        return SUCCESS;
    }
    
    public String delete(){
        System.out.println(person);
        return SUCCESS;
    }

    /**
     * 返回person物件即可
     */
    @Override
    public Person getModel() {
        return person;
    }
    
    /**
     * validate方法在封裝引數之前做資料驗證
     * 如果驗證不通過就跳轉到表單頁面
     */
    public void validate() {
        if(person.getId() == null || !(person.getId()+"").matches("\\d{1,5}")){
            this.addFieldError("id", "id必須是1到5位的數字");
        }
        if(!person.getName().matches("[a-zA-Z]{3,8}")){
            //新增提示資訊, 引數①表單中文字域的name的值 引數②是提示資訊
            this.addFieldError("name", "姓名只能是3-8位大小寫字母");
        }
    }
}

訪問(什麼都不填寫的情況下):

結果:

注意: 此種方法預設是對該動作類中的所有方法都做校驗的, 要想取消對某個/某些方法的校驗有兩種方法:

1 使用"@SkipValidation"註解:

@SkipValidation
    public String delete(){
        System.out.println(person);
        return SUCCESS;
    }

2 修改校驗的方法名, 方法命名規則: validate+"要驗證的方法名"(駝峰模式):

/**
     * validate方法在封裝引數之前做資料驗證
     * 如果驗證不通過就跳轉到表單頁面
     */
    public void validateSave() {
        if(person.getId() == null || !(person.getId()+"").matches("\\d{1,5}")){
            this.addFieldError("id", "id必須是1到5位的數字");
        }
        if(!person.getName().matches("[a-zA-Z]{3,8}")){
            //新增提示資訊, 引數①表單中文字域的name的值 引數②是提示資訊
            this.addFieldError("name", "姓名只能是3-8位大小寫字母");
        }
    }

②宣告式驗證

將驗證資訊配置在xml檔案中, 做到跟動作類分離, 以便後續可以修改, 該配置檔案的命名規範: 動作類的名稱+validation.xml

1 新建一個xml檔案, 該配置檔案必須建立在動作類的同級包下, 配置頭資訊:

<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

"PersonAction1-validation.xml"配置檔案:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<!-- 
    field: 表單中要提交的文字域
    name: 文字域中的name
 -->
    <field name="name">
    
    <!-- 文字域的驗證器
     -->
        <field-validator type="requiredstring">
        
        <!-- 錯誤資訊
         -->
            <message>姓名不能為空</message>
        </field-validator>
    </field>
</validators>

動作類中去掉驗證方法, 交給配置檔案

訪問結果: