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拦截器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值