Как передать свойство объекта в качестве параметра пользовательскому валидатору Struts

Это пользовательский валидатор, имеет геттеры / сеттеры для countryCode

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. Я хочу проверить почтовый индекс в зависимости от страны. Когда я отлаживаю приведенный выше код, countryCode имеет значение ${address.country},

Как я могу получить стоимость недвижимости страны?

1 ответ

Решение

Вы должны расширить свой пользовательский валидатор с ValidatorSupport, Тогда в коде реализации вы можете использовать parse метод, чтобы получить значение параметра, если это выражение OGNL.

String country = (String) parse(this.countryCode, String.class);
Другие вопросы по тегам