0
有沒有從驗證器中訪問其他表單字段的正確方法? 有另一種解決方案比:訪問來自驗證器內部的請求參數
context.getViewRoot().findComponent("formid:exampleField:example")?
f.e我想驗證一個自定義的驗證器內的城市場和檢查,如果國家是美國。
有沒有從驗證器中訪問其他表單字段的正確方法? 有另一種解決方案比:訪問來自驗證器內部的請求參數
context.getViewRoot().findComponent("formid:exampleField:example")?
f.e我想驗證一個自定義的驗證器內的城市場和檢查,如果國家是美國。
重讀你的問題,我將它解釋爲這樣:
「你想編寫一個檢查,如果一個城市字段存在,國家字段等於‘美國’自定義驗證「
所以,我想看看下面的方式去了解這一點:
首先創建一個驗證器接口:
@Documented
@ValidatorClass(value=CountryEqualsUSValidator.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface CountryEqualsUS {
String message() default "The country should be US for the city provided";
}
然後創建AV alidator類:
public class CountryEqualsUSValidator implements Validator<CountryEqualsUS> {
public void initialize(CountryEqualsUS arg0) {
}
public boolean isValid(Object value) {
if(value != null && value instanceof YourBeanClass) {
YourBeanClass yourBeanClass = (YourBeanClass) value;
if(/*some test logic here*/) {
return true;
else {
return false;
}
}
return false;
}
}
然後在類要驗證:
@CountryEqualsUS
public class YourBeanClass {
...
}
然後,最後,在你的控制器/動作類,當表單提交,城市是一個值你想檢查的國家,添加此方法,並將其稱爲:
public boolean doValidation(YourBeanClass yourBeanClass) {
ClassValidator requestValidator = new ClassValidator(yourBeanClass.getClass());
InvalidValue[] validationMessages = requestValidator.getInvalidValues(yourBeanClass);
if (validationMessages != null && validationMessages.length > 0) {
for (int i = 0; i < validationMessages.length; i++) {
//Add a validation message to be displayed to the user
}
return false;
}
return true;
}
您是否找到您的問題的答案? – 2009-08-07 00:41:50