1. 程式人生 > >Struts2--驗證框架

Struts2--驗證框架

html4 dexp get ftw exec req 復制 lib cnblogs

  Struts2的驗證通過配置xml或者註解的方式。依賴與validationheworkflow接口(被默認的攔截器桟引入)。validation接口執行驗證並且創建一些列的錯誤域。workflow接口檢查驗證錯誤的狀態,一旦發現,就默認返回"input",

先看一個簡單的驗證實例:

技術分享 View Code 技術分享 View Code 技術分享 View Code 技術分享 View Code 技術分享 View Code

執行結果:

技術分享

從系統自帶的驗證器配置文件validators.xml文件可以看出,系統能夠自帶了以下的配置文件

技術分享
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator Config 1.0//EN"
        "http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
 
<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
    
</validators>
技術分享

自定義驗證

  在struts2中要想實現驗證,可以實現通過實現以下幾個接口的方式來實現

  • com.opensymphony.xwork2.validator.validators.ValidatorSupport
  • com.opensymphony.xwork2.validator.validators.FieldValidatorSupport
  • com.opensymphony.xwork2.validator.validators.RangeValidatorSupport
  • com.opensymphony.xwork2.validator.validators.RepopulateConversionErrorFieldValidatorSupport

實例:

技術分享
package com.fuwh.model;

public class Student {
    
    //首先編寫一個學生實體類
    
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }
    
}<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %>
技術分享 技術分享
<%@ page import="java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>表單界面</title>
</head>
<body>
    <p>然後編寫一個前臺註冊頁面</p>
<s:fielderror></s:fielderror>
<s:form method="post" action="validationAction"> <s:textfield name="stu.name" label="名字"/> <s:textfield name="stu.age" label="年齡"/> <s:submit value="註冊"></s:submit> </s:form> </body> </html>
技術分享 技術分享
package com.fuwh.model;

import com.opensymphony.xwork2.ActionSupport;

public class ValidationAction extends ActionSupport{

    private static final long serialVersionUID = 1L;
    
    private Student stu;
    
    public Student getStu() {
        return stu;
    }

    public void setStu(Student stu) {
        this.stu = stu;
    }
    //這是action的默認入口方法
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("execute the default method!!!-->>"+stu);
        return SUCCESS;
    }
    
    
}
技術分享 技術分享
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <!-- 開啟debug模式,會自動加載配置文件等等,不用每次更改了配置文件就去重新啟動下服務器 -->
    <constant name="struts.devMode" value="true" />
    
    <!-- 配置action -->
    <package name="validation" extends="struts-default">
        <action name="validationAction" class="com.fuwh.model.ValidationAction">
            <result name="success">success.jsp</result>
            <!-- 必須要有input -->
            <result name="input">index.jsp</result>
        </action>
    </package>

</struts>
技術分享 技術分享
package com.fuwh.model;

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;

public class MyValidator extends FieldValidatorSupport{

    
    @Override
    public void validate(Object object) throws ValidationException {
        // TODO Auto-generated method stub
        String fieldName=this.getFieldName();    //取得字段名
        String fieldValue=this.getFieldValue(fieldName, object).toString();    //取得字段值
        
        if(fieldValue.indexOf("日")!=-1){
            //添加錯誤信息
            this.addFieldError(fieldName, object);
        }
    }
}
技術分享 技術分享
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator Config 1.0//EN"
        "http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
 
<validators>
    <!-- 這些是默認的驗證器 -->
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
    
    <!--
        將默認的validators.xml文件添加到classpath,然後在裏面添加自己的驗證器MyValidator
        name:就是自己的驗證器的名字,以後在action名-validation.xml文件中配置驗證的時候需要使用
     -->
    <validator name="myvalidator" class="com.fuwh.model.MyValidator"/>    
</validators>
技術分享 技術分享
<?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">

<!-- 配置驗證器,文件和action類放在一個地方,命名為action的類名+"-validaiont.xml" -->
<validators>
    <field name="stu.name">
        <!-- 
            對名字字段,
                同時使用系統自帶的requiredstring來驗證熊為空
                和自定義的驗證,來驗證不能包含敏感詞匯
        -->
        <field-validator type="requiredstring">
            <message>年齡不能為空</message>
        </field-validator>
        <field-validator type="myvalidator">
            <message>姓名不能包含敏感詞匯</message>
        </field-validator>
    </field>
    <field name="stu.age">
        <field-validator type="int">
            <param name="min">12</param>
            <param name="max">18</param>
            <message>年齡只能在12到18歲之間</message>
        </field-validator>
    </field>
</validators>
技術分享

技術分享

Struts2--驗證框架