24.struts2_短路验证,非字段验证,相同验证规则使用一条相应

本文详细介绍了Struts2框架中的验证机制,包括短路验证的实现方式、非字段验证的应用场景以及如何通过配置实现同一验证规则对应不同字段时显示统一的错误提示信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、短路验证

validation.xml中添加 conversion类型转换错误验证,当在Age文本框输入非int型参数后,后台会返回包含范围、转换错误的多条消息。

<validators>

	<!-- 基于字段的验证 -->
	<field name="age">

		<!-- 发生类型转换错误时的验证 -->
		<validator type="conversion" short-circuit="false">
			<message>Conversion Error Occurred</message>
		</validator>

		<field-validator type="int">
			<param name="min">20</param>
			<param name="max">50</param>
			<message key="error.int">Age needs to be between ${min}and ${max}</message>
		</field-validator>
	</field>
</validators>


为了保证页面每次只得到一条,可以在 validator 节点设置短路验证

<!-- 发生类型转换错误时的验证 -->
		<validator type="conversion" short-circuit="true">

这样,当发生类型转换错误时就会返回,而不进行下面的验证。


二、非字段验证

验证页面上两次密码输入是否相等时,使用非字段验证。错误信息会包含在值栈key为actionError内。

<!-- 非字段验证 -->
	 
	<validator type="expression">
		         
		<param name="expression"> <![CDATA[password==password2]]> </param>
		         
		<message>Password is not equals to password2  .... </message>
		      
	</validator>


三、相同验证规则使用同一条相应消息

对 age和count验证,在页面上使用同样的相应消息。 message属性中用key指定了国际化内容

<validators>
<!-- 基于字段的验证 -->
    <field name="age">
    	<field-validator type="int">
    		<param name="min">10</param>
    		<param name="max">40</param>
    		<message key="error.int">Age needs to be between ${min}and ${max}</message>
    	</field-validator>
    </field>
    
    <field name="count">
    	<field-validator type="int">
    		<param name="min">1</param>
    		<param name="max">10</param>
    		<message key="error.int">Count needs to be between ${min}and ${max}</message>
    	</field-validator>
    </field>
</validators>


国际化文件:

在国际化文件中,执行fieldName就是对应的字段名称,然后再把age和count单独赋值为“年龄” “数量”。这样在页面就可以共用一句相应并且字段名称可国际化

error.int=~${getText(fieldName)} needs to be between ${min}and ${max}

age=\u5E74\u9F84

count=\u6570\u91CF




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值