你不能這樣做。
以下是我通過Hibernate Validator獲得更多動態驗證所做的工作。
- 延長
ClassValidator
類。
- 重寫
getInvalidVaues(Object myObj)
方法。首先,請撥打super.getInvalidValues(myObj)
,然後將鉤子添加到您的自定義驗證中。
- 實例化您的自定義驗證程序並致電
getInvalidValues
進行驗證。任何hibernate註釋的驗證都會在這個時候啓動,並且您的自定義動態驗證(任何不受註釋支持的內容)也將啓動。
例子:
public class MyObjectValidator extends ClassValidator<MyObject>
{
public MyObjectValidator()
{
super(MyObject.class);
}
public InvalidValue[] getInvalidValues(MyObject myObj)
{
List<InvalidValue> invalids = new ArrayList<InvalidValue>();
invalids.addAll(Arrays.asList(super.getInvalidValues(myObj)));
// add custom validations here
invalids.addAll(validateDynamicStuff(myObj));
InvalidValue[] results = new InvalidValue[invalids.size()];
return invalids.toArray(results);
}
private List<InvalidValue> validateDynamicStuff(MyObject myObj)
{
// ... whatever validations you want ...
}
}
所以您的自定義驗證代碼包含這樣的邏輯「做這個驗證,如果用戶配置的它,否則做一個」,等等。你可能會或可能無法以利用相同的代碼來支持hibernate驗證,但無論如何,您正在做的是更多地涉及hibernate驗證器的'正常'用例。
覆蓋註解_wont_工作。自定義hibernate驗證器的一種方法是編寫自己的註釋,但這對於DR正在嘗試執行的操作不起作用,b/c在運行時不能訪問動態值,除了註釋是字段附屬於。註釋中的任何輸入都必須是常量。對於可行的事情,請查看下面的答案。 – 2009-04-23 12:29:23