2

これはカスタムバリデータであり、ゲッター/セッターがあります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>

Address オブジェクトには zip とcountryCode. 国に基づいて郵便番号を検証したい。上記のコードをデバッグするとcountryCode、値が${address.country}.

国のプロパティ値を取得するにはどうすればよいですか?

4

1 に答える 1

0

からカスタム バリデータを拡張する必要がありますValidatorSupport。次に、実装コードでparseメソッドを使用して、パラメーターの値が OGNL 式の場合に取得できます。

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