Struts2框架中原生校验器以及自定义校验器与规则

Struts2校验框架可以在request进Action之前对请求参数进行校验,非法则拦截返回,框架自带了不少常用校验器可以直接配置此外我们可以自定义一个校验器已满足自身的定制诉求

Struts2框架中原生校验器以及自定义校验器与规则

所属分类: JAVA
专题标签: Struts2 自定义 校验

原生校验器

我们都知道Struts2校验框架原生(自带)有不少校验规则 。
有时候我们会频繁使用到某些后台参数校验逻辑,如果始终使用正则表达式,在书写校验文件的时候比较冗长。
这时候我们可以针对自身需求定制一个专门的校验器。

常见的原生校验

  • required:必填校验器
  • requiredstring:必填字符串校验器
  • int:整数校验器
  • double:双精度浮点数校验器
  • date:日期校验器
  • email:电子邮件校验器
  • url:网址校验器
  • stringlength:字符串长度校验器
  • regex:正则表达式校验器

    校验配置文件

    校验配置文件放在Action目录下,命名:Action名-方法名-validation.xml
    例如:RunningManAction-createRuningMan-validation.xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
    3. "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
    4. <validators>
    5. <!-- 本样例主要说明各类元素标签,实际应用可能仅使用部分标签 -->
    6. <!-- 校验参数名 -->
    7. <field name="runningMan.userName">
    8. <!-- 指定校验器,此处指定了自定义的校验器customer -->
    9. <field-validator type="customer">
    10. <!-- 入参,主要分两类,值/正则 -->
    11. <!-- 入参需要合法不要出现收参转换失败的情况,如给整型传字母 -->
    12. <param name="exclusionChar">#'&,;"|</param>
    13. <!-- 正则入参需要注意语法,比如限制输入数字字母 -->
    14. <param name="regex"><![CDATA[^[A-Za-z0-9]$]]> </param>
    15. <message>userName invalid format.</message>
    16. </field-validator>
    17. <field-validator type="required">
    18. <!-- 略...多个校验器 -->
    19. </field-validator>
    20. </field>
    21. </validators>

自定义校验器

上文中我们使用到了一个自定义的校验器customer。
这个校验器并不存在,需要定义这样一个校验器。
validators.xml一般放在工程根目录下WBE-INFO/class。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator Definition 1.0//EN"
  3. "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">
  4. <validators>
  5. <!-- 指定自定义的校验类,如检查特殊符号校验类 -->
  6. <validator name="customer" class="com.mebugs.validation.CheckSpecialSymbol"/>
  7. </validators>

校验器代码实例

CheckSpecialSymbol自定义校验器类代码实例。

  1. package com.mebugs.validation;
  2. import com.opensymphony.xwork2.validator.ValidationException;
  3. import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
  4. public class CheckSpecialSymbol extends FieldValidatorSupport {
  5. //校验文件中的入参,限制哪些字符不可出现
  6. private String exclusionChar;
  7. @Override
  8. public void validate(Object object) throws ValidationException {
  9. //校验参数名
  10. String fieldName = getFieldName();
  11. //参数名对应的参数值
  12. Object value = getFieldValue(fieldName, object);
  13. if ( value != null ) {
  14. if (!(value instanceof String)) {
  15. //不是字符串报错
  16. addFieldError(fieldName, object);
  17. } else {
  18. String s = (String)value;
  19. for (int i = 0;i < s.length(); i++) {
  20. //存在了此字符串,报错
  21. if (exclusionChar.indexOf(s.charAt(i)) != -1) {
  22. addFieldError(fieldName, object);
  23. }
  24. }
  25. }
  26. }
  27. }
  28. public String getExclusionChar() {
  29. return exclusionChar;
  30. }
  31. public void setExclusionChar(String exclusionChar) {
  32. this.exclusionChar = exclusionChar;
  33. }
  34. }

完成以上逻辑,可以使自定义的校验器生效。