字段验证: 判断某个字段属性的输入是否有效
非字段验证: 不只针对某个字段,而是针对多个字段的输入值之间的逻辑关系进行校验。
index.jsp
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form action="testValidate">
<s:textfield name="age" label="age"></s:textfield>
<s:textfield name="reage" label="reage"></s:textfield>
<s:textfield name="idcare" label="id"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
ValidateAction.java
ActionSupport 类已经实现了Validateable 接口
package com.oracle.va;
import com.opensymphony.xwork2.ActionSupport;
public class ValidateAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private int age;
private int reage;
private String idcare;
public int getReage() {
return reage;
}
public void setReage(int reage) {
this.reage = reage;
}
public String getIdcare() {
return idcare;
}
public void setIdcare(String idcare) {
this.idcare = idcare;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String execute(){
return SUCCESS;
}
}
ValidateAction-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" short-circuit="false">
<param name="min">20</param>
<param name="max">50</param>
<message>age 在${min} 和 ${max}之间</message>
</field-validator>
</field>
<field name="reage">
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[(age==reage)]]></param>
<message>age 和reage 不一致</message>
</field-validator>
</field>
<!-- 自定义验证 ,idcare长度限制 -->
<field name="idcare">
<field-validator type="idcare">
<param name="length">18</param>
<message>idcare 的长度大于18</message>
</field-validator>
</field>
</validators>
非字段验证的写法是::
<validator type="fieldexpression">
<param name="fieldName">age</param>
<param name="fieldName">reage</param>
<param name="expression"><![CDATA[(age==reage)]]></param>
<message>age 和reage 不一致</message>
</validator>
还有一个不为空验证常用::
<validator type="requiredstring">
<param name="fieldName">name</param>
<param name="trim">true</param>
<message>name不为空</message>
</validator>
–若需要普通的验证程序, 可以继承ValidatorSupport 类
–若需要字段验证程序, 可以继承FieldValidatorSupport 类
package com.oracle.va;
import com.opensymphony.xwork2.validator.FieldValidator;
import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
public class IDcardValidate extends FieldValidatorSupport {
private int length;//长度限制参数
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
@Override
public void validate(Object arg0) throws ValidationException {
// TODO Auto-generated method stub
ValidateAction v=(ValidateAction)arg0;
if(v.getIdcare().length()>this.getLength()){
addFieldError(getFieldName(), arg0);
}
}
}
自定义验证器的配置文件
自定义验证器需要在类路径里的某个validators.xml 文件里注册: 验证框架首先在根目录下找validators.xml文件,没找到validators.xml文件, 验证框架将调用默认的验证设置,即default.xml里面的配置信息.
validators.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Definition 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">
<!-- START SNIPPET: validators-default -->
<validators>
<validator name="idcare" class="com.oracle.va.IDcardValidate"/>
</validators>
<!-- END SNIPPET: validators-default -->