23.struts2_輸入驗證


概述

一個健壯的web應用程序必須保證用戶輸入時合法、有效的。除了前段js的驗證外,後臺也要進行驗證。

Struts2的輸入驗證

-->基於XWork Validation Framework的聲明式驗證:在xml中配置

-->編程驗證:通過編寫代碼進行驗證輸入


Action類:TestValidationAction

public class TestValidationAction extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private int age;

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String execute() throws Exception {
		System.out.println("age:"+age);
		return SUCCESS;
	}
	
}


同TestValidationAction類所在包下的TestValidationAction-validation.xml驗證文件

該文件命名規則就是 AcitonName-validation.xml

<!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="age">
    	<field-validator type="int">
    		<param name="min">20</param>
    		<param name="max">50</param>
    		<message>Age needs to be between ${min}and ${max}</message>
    	</field-validator>
    </field>
</validators>


jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<s:form action="testValidation">
		<s:textfield name="age" label="Age"></s:textfield>
		<s:submit name="submit"></s:submit>
	</s:form>
</body>
</html>

struts.xml

<struts>
	<!-- 配置國際化資源文件 -->
	<constant name="struts.custom.i18n.resources" value="i18n"></constant>

    <package name="default" namespace="/" extends="struts-default">
    
    <action name="testValidation" class="com.hcx.struts2.validation.app.TestValidationAction">
    	<result>/success.jsp</result>
    	<result name="input">/validation.jsp</result>
    </action>
    
    </package>
</struts>

Struts2的驗證器:在xwork包下找到default.xml定義了各種驗證器


<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>

二、若兩個請求進入一個Action
,針對不同請求配置不同驗證xml文件,取名時按照ActoinName-requestURI-validation.xml形式



對應兩個請求的struts.xml

<struts>
	<!-- 配置國際化資源文件 -->
	<constant name="struts.custom.i18n.resources" value="i18n"></constant>

    <package name="default" namespace="/" extends="struts-default">
    
    <action name="testValidation" class="com.hcx.struts2.validation.app.TestValidationAction">
    	<result>/success.jsp</result>
    	<result name="input">/validation.jsp</result>
    </action>
    
     <action name="testValidation2" class="com.hcx.struts2.validation.app.TestValidationAction">
    	<result>/success.jsp</result>
    	<result name="input">/validation2.jsp</result>
    </action>
    
    </package>
</struts>


三、原理解析

Struts2默認的攔截器棧中,提供了validation攔截器

發佈了81 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章