在上一篇中,主要是用到的自带的判断方式,比如不能为空,长度,格式等,但对于开发来说,这些验证远远不够,struts提供了一种自定义验证的方式,
我们通过验证非法,带有色情侮辱,种族歧视等的内容验证。
默认的验证都有那些?
找一下源码:validator.xml:
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Config 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="creditcard" class="com.opensymphony.xwork2.validator.validators.CreditCardValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
显然这些是远远不够的。
随便看一个的源码validators:RequiredFieldValidator
public class RequiredFieldValidator extends FieldValidatorSupport {
public void validate(Object object) throws ValidationException {
String fieldName = getFieldName();
Object value = this.getFieldValue(fieldName, object);
if (value == null) {
addFieldError(fieldName, object);
} else if (value.getClass().isArray() && Array.getLength(value) == 0) {
addFieldError(fieldName, object);
} else if (Collection.class.isAssignableFrom(value.getClass()) && ((Collection) value).size() == 0) {
addFieldError(fieldName, object);
}
}
}
验证非法字符
新建 自定义验证器:SensitiveWord 放在com.java.validators包中
public class SensitiveWord extends FieldValidatorSupport{
@Override
public void validate(Object obj) throws ValidationException {
// TODO Auto-generated method stub
String fieldName = this.getFieldName();//获取名字
String value = this.getFieldValue(fieldName, obj).toString();//获取值
if(!check(value)) {
this.addFieldError(fieldName, obj);
}
}
public boolean check(String value) {
String sensitiveWord[] = {"草","你妈","狗比"};
for(int i=0;i<sensitiveWord.length;i++) {
if(value.indexOf(sensitiveWord[i])>-1) {
return false;
}
}
return true;
}
}
把validator.xml放到src下,并把刚写的SensitiveWord添加进去。
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="creditcard" class="com.opensymphony.xwork2.validator.validators.CreditCardValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
<validator name="sensitiveword" class="com.java.validators.SensitiveWord"/>
</validators>
接下来就是和上一篇一样的步骤:
SensitiveWordAction类:
public class SensitiveWordAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String execute() throws Exception {
System.out.println(name+"\t通过验证");
return SUCCESS;
}
}
sensitive.jsp页面:
<s:form action="sensitive" method="post">
<s:textfield name="name" label="name"></s:textfield>
<s:submit value="submit"></s:submit>
</s:form>
SensitiveWordAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!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="name">
<field-validator type="sensitiveword">
<message>含有敏感词汇</message>
</field-validator>
</field>
</validators>
status.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="hello" extends="struts-default" >
<action name="sensitive" class="com.java.action.SensitiveWordAction">
<result name="input">sensitiveWord.jsp</result>
<result name="success">success.jsp</result>
</action>
</package>
</struts>
测试: