2

这是自定义验证器,具有 getter/settercountryCode

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}.

如何获得国家财产价值?

4

1 回答 1

0

您需要从ValidatorSupport. 然后在实现代码中parse,如果它是一个 OGNL 表达式,您可以使用方法来获取参数的值。

String country = (String) parse(this.countryCode, String.class);
于 2014-12-13T11:58:20.060 回答