【问题标题】:How to pass the object property as param to Struts custom validator如何将对象属性作为参数传递给 Struts 自定义验证器
【发布时间】:2014-12-12 22:38:42
【问题描述】:

这是自定义验证器,具有 countryCode 的 getter/setter

public void validate(Object object) throws ValidationException {
String fieldName = getFieldName();

Object zipObj = this.getFieldValue(fieldName, object);
String country = getCountryCode();
String zipCode = (String) zipObj;

if (zipCode == null || ("".equals(zipCode))) {
  return;
}

boolean valid = false;
try {
  if ((Country.DEFAULT).equalsIgnoreCase(country)) {
    valid = Pattern.matches(US_ZIP_FORMAT, zipCode);
    int testZip = Integer.parseInt(zipCode.substring(0, 5));
    if (testZip == 0) {
      valid = false;
    }
  } else if ((Country.CANADA).equalsIgnoreCase(country)) {
    valid = Pattern.matches(CANADA_ZIP_FORMAT, zipCode);
  } else {
    valid = Pattern.matches(OTHER_ZIP_FORMAT, zipCode);
  }
} catch (Exception e) {
  logger.error("Cannot validate zip code (" + zipCode + ") for country ("
      + country + ").");
  valid = false;
}

if (!valid) {
  addFieldError(fieldName, object);
}
}

如何将国家/地区代码传递回自定义验证器。这是我的ActionClass-validation.xml

<validators>
<field name="address.zip">
    <field-validator type="zipValidator">
        <param name="countryCode">${address.country}</param>
        <message key="errors.zip.invalid" />
    </field-validator>
</field>
</validators>

地址对象有 zip 和 countryCode。我想根据国家/地区验证 zip。当我调试上面的代码时,countryCode 的值是${address.country}

如何获取国家属性值?

【问题讨论】:

    标签: java struts2 ognl xml-validation xwork


    【解决方案1】:

    您需要从ValidatorSupport 扩展您的自定义验证器。然后在实现代码中,如果是OGNL表达式,可以使用parse方法获取参数的值。

    String country = (String) parse(this.countryCode, String.class);
    

    【讨论】:

      猜你喜欢
      • 2022-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多