Struts2_15_Struts验证框架(2)

在上一篇中,主要是用到的自带的判断方式,比如不能为空,长度,格式等,但对于开发来说,这些验证远远不够,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>

测试:

猜你喜欢

转载自blog.csdn.net/qq_27163329/article/details/81610021