Struts2 短路验证&非字段验证

版权声明:博客知识产权来源命运的信徒,切勿侵权 https://blog.csdn.net/qq_37591637/article/details/85051885

短路验证

若一个字段有多个验证器的话,默认情况下会执行所有的验证器,若希望前面的验证器没有通过的话,后面就不再验证,可以使用短路验证。

<validator/>元素和<field-validator/>元素可以指定一个可选的short-circuit属性,该属性指定验证器是否为短验证器,默认为false

<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
   <!--  针对age属性进行验证-->
   <field name="age">
   <!-- 类型转换问题 -->
   <!-- 短路验证,如果当前验证没有通过的话,就不会进行下面的验证 -->
   <field-validator type="conversion" short-circuit="true">
   <message>Conversion Error Occurred</message>
   </field-validator>
   <!-- -字段范围内 -->
   <field-validator type="int">
   <param name="min">20</param>
   <param name="max">50</param>
   <message key="error_age"></message>
   </field-validator>
   </field>
</validators>

若类型转化失败,默认情况下还会执行后面的拦截器,还会进行验证。

可以通过修改ConversionErrorInterceptor源代码的方式使当类型转换失败时,不再执行后续的验证拦截器,而直接返回input的result


 非字段验证(密码与确认密码的功能)

非字段验证:不是针对某一个字段的验证,例如密码与确认密码两个字段的比较

demo如下

Action类

package cn.com.app;
import com.opensymphony.xwork2.ActionSupport;
public class TextValidation extends ActionSupport {
	private static final long serialVersionUID = 1L;
	/*
	 * author:命运的信徒 date:2018/12/17 arm:申明式的验证
	 */
	private int age;
	private String password;
	private String password2;
	
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getPassword2() {
		return password2;
	}
	public void setPassword2(String password2) {
		this.password2 = password2;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String execute() {
		System.out.println("age:" + age);
		return SUCCESS;
	}
}

 申明式验证的配置

<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
	<!-- 针对age属性进行验证 -->
	<field name="age">
		<!-- 类型转换问题 -->
		<!-- 短路验证,如果当前验证没有通过的话,就不会进行下面的验证 -->
		<field-validator type="conversion" short-circuit="true">
			<message>Conversion Error Occurred</message>
		</field-validator>
		<!-- -字段范围内 -->
		<field-validator type="int">
			<param name="min">20</param>
			<param name="max">50</param>
			<message key="error_age"></message>
		</field-validator>
	</field>


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

	</validator>

</validators>




struts.xml

<action name="mag" class="cn.com.app.TextValidation">
<result name="input">/validator.jsp</result>
<result>/success.jsp</result>
</action>

jsp页面

<body>
<s:actionerror/>
	<s:form action="mag.action">
		<s:textfield name="age" label="age"></s:textfield>
		<s:password name="password" label="password"></s:password>
		<s:password name="password2" label="password2"></s:password>
		<s:submit></s:submit>
	</s:form>
</body>

非字段验证在页面上显示

<s:actionerror/>

猜你喜欢

转载自blog.csdn.net/qq_37591637/article/details/85051885