版权声明:博客知识产权来源命运的信徒,切勿侵权 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页面
扫描二维码关注公众号,回复:
4574449 查看本文章
<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/>