概述:
一個健壯的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攔截器