自定义验证器示例:
在src下仿造default.xml的声明方式创建一个*.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
<validator name="chinese" class="com.java.struts2.action.ChineseValidator" />
</validators>
引用自定义框架
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="user.account">
<field-validator type="chinese">
<param name="mode">none</param>
<message>用户账号,只能输入非中文的字符</message>
</field-validator>
</field>
<field name="user.username">
<field-validator type="requiredstring">
<message>请输入姓名</message>
</field-validator>
</field>
<field name="user.age">
<field-validator type="int">
<param name="min">18</param>
<message>年龄必须在18岁以上</message>
</field-validator>
</field>
</validators>
实现自定义验证器
package com.java.struts2.action;
import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
public class ChineseValidator extends FieldValidatorSupport {
/**
* 表示是否包含有中文。现在有3种模式
* none没有中文字符
* some含有中文字符,默认值
* all全是中文字符
*/
private String mode = "some";
public void setMode(String mode) {
this.mode = mode;
}
public void validate(Object object) throws ValidationException {
//获取字段名
final String fieldName = this.getFieldName();
//获取字段值
final String fieldValue = (String) this.getFieldValue(fieldName, object);
//字节数
final int bytes = fieldValue.getBytes().length;
//字符数
final int chars = fieldValue.length();
if(mode.equals("none")) {
//现在要求全是非中文字符,所以字节数和字符数必须相等
if(chars != bytes) {
this.addFieldError(fieldName, object);
} else if(mode.equals("some")) {
//现在要求包含有中文字符,所以字节数和字符数不相等
//另外如果字节数是字符数的两倍,表示全是中文字符,也出错
if(chars==bytes || chars*2==bytes) {
this.addFieldError(fieldName, object);
}
} else if(mode.equals("all")) {
//现在要求全是中文,所以字节数应该是字符数的两倍,否则出错
if(chars*2 != bytes) {
this.addFieldError(fieldName, object);
}
}
}
}
}
表单:
<span style="white-space:pre"> </span><s:form action="login" method="post">
<s:textfield name="user.account" label="账号" />
<s:textfield name="user.username" label="姓名" />
<s:textfield name="user.age" label="年龄" />
<s:submit value="注册" />
</s:form>