struts2表单验证

一种方式:

Struts2推荐采用配置文件的方式进行数据校验

a.继承ActionSupport类

b.修改struts2.xml文件:删除method属性

c.在需要验证的Action类的相同包下,写一个校验器文件

d.加入头信息以具有提示功能

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

Field-Validator(校验器)的使用

校验器文件需要和其保护的Action类在同一目录下,命名格式为:

所保护的Action的实现类名−要保护的成员方法−validation.xml

LoginAction-execModifyPassword-validation.xml

LoginAction 对应 ActionClassName,execModifyPassword 对应 action 请求,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="要校验的注入字段名">
        <field-validator type="校验器类型">
            <param name="扩展校验功能"></param>
            <message>校验失败时提示信息</message>
        </field-validator>
    </field>
    <field name="要校验的注入字段名">
        <field-validator type="校验器类型">
            <message key="校验失败时提示信息" />
        </field-validator>
    </field>
</validators>

可以为一个校验文件设定多个校验字段,可以为一个校验字段设定多个校验器,可以为一个校验器做多次扩展。

校验不通过信息的位置

当校验器校验不通过时,会返回"input"逻辑视图,在struts.xml对应的Action下配置它。
通过使用:

<s:fielderror>
    <s:param>要校验的注入字段名</s:param>
</s:fielderror>

<s:fielderror fieldName="要校验的注入字段名"/>
struts2表单验证里field-validator type值可以取哪些值?

int 整数;
date 日期;
email Email地址;
requiredstring 必须字符;
stringlength 输入字符长度限制;
url web地址
regex 正则表达式验证

<!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="password">
 <!-- 验证字符串不能为空 --> 
	<field-validator type="requiredstring" short-circuit="true">
		<!-- 去空格 -->
		<param name="trim">true</param>
		 <!-- 错误提示信息 -->  
		<message key="password.required"></message>
	</field-validator>
	<field-validator type="passwordCharFilter" short-circuit="true">
		<message key="password.dengbaoilleqalchar"></message>
	</field-validator>
	<!-- 验证字符串长度 -->    
	<field-validator type="stringlength">
		<param name="trim">true</param>
		<param name="maxLength">12</param>
		<param name="minLength">6</param>
		 <message key="password.length"></message> <!-- 密码长度应在6到12个字符之间 -->
	</field-validator>
</field>
<!-- 旧密码 -->
<field name="oldPassword">
	<field-validator type="requiredstring" short-circuit="true">
		<param name="trim">true</param>
		<message key="oldPassword.required"></message>
	</field-validator>
	<!--<field-validator type="passwordCharFilter" short-circuit="true">
        <message key="password.dengbaoilleqalchar"></message>
    </field-validator>-->
	<field-validator type="stringlength" short-circuit="true">
		<param name="trim">true</param>
		<param name="maxLength">12</param>
		<param name="minLength">6</param>
		 <message key="oldPassword.length"></message>
	</field-validator>
</field>
<!-- 重复密码 -->
<field name="repassword">
	<field-validator type="requiredstring" short-circuit="true">
		<param name="trim">true</param>
		<message key="repassword.required"></message>
	</field-validator>
	<field-validator type="passwordCharFilter" short-circuit="true">
		<message key="password.dengbaoilleqalchar"></message>
	</field-validator>
	<field-validator type="stringlength" short-circuit="true">
		<param name="trim">true</param>
		<param name="maxLength">12</param>
		<param name="minLength">6</param>
		 <message key="repassword.length"></message>
	</field-validator>
	<!-- 两次密码是否一致 -->
	<field-validator type="fieldexpression" short-circuit="true">
     <param name="expression"><![CDATA[(#parameters.password[0] == #parameters.repassword[0])]]></param>
     <message key="repassword.noEquals"></message>
	</field-validator>
</field>
</validators>  

<field name="age">    
   <field-validator type="int">    
    <param name="min">1</param>    
    <param name="max">100</param>    
    <message>年龄应在1到100之间</message>    
   </field-validator>    
</field>    
<!-- 验证字符串为日期类型 -->    
<field name="birthday">    
   <field-validator type="date">    
    <param name="min">1900-01-01</param>    
    <param name="max">2008-10-16</param>    
    <message>出生日期应在1900-01-01到2008-10-16</message>    
   </field-validator>    
</field>
<field name="email">
        <field-validator type="email">
            <message key="必须是有效的邮件地址!" />
        </field-validator>
    </field>
    <field name="url">
        <field-validator type="url">
            <message key="必须是有效的网址!" />
        </field-validator>
    </field>
    <field name="yum">
        <field-validator type="regex">
            <!-- 2.3.15前的版本使用expression参数 -->
            <param name="regexExpression"><![CDATA[(\d{5})]]></param>
            <message>必须是有效的yum(5位数字)!</message>
        </field-validator>
    </field>
</validators>
short-circuit=“true”

短路验证参考

Struts2 Field校验框架message元素key的使用方式

Struts2 Field校验框架message元素key的使用方式

另一种方式:

Action中的validate()方法

struts2提供了一个Validateable接口,这个接口中只存在validate()方法。

validate()方法会在execute()方法执行之前执行,仅数据校验正确时,才执行execute方法。如果错误则将错误添加到fieldErrors域中,如果定义的Action中存在多个逻辑处理方法,且不同的处理逻辑需要不同的校验规则,这种情况下validate()会对所有处理逻辑使用相同的校验规则,为了实现不同的校验逻辑,需要通过validateX()方法,其中X表示处理逻辑的方法名。

public String add() throws Exception {
		ds.add(dg);
		close = true;
		return SUCCESS;
    }
	
	public void validateAdd(){
		int begin = dg.begin;
		int end = dg.end;
		if(begin != 0 && end != 0){
		if(begin >= end){
			this.addFieldError("errorDG", this.getText("dg.endMaxBegin"));
			return;
		}
		if((end - begin + 1) < 10 || (end - begin + 1)>300){
			this.addFieldError("errorDG", this.getText("dg.endOrBegin"));
			return;
		 }
		}
	}	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值