我有一個會話屬性休眠對象上不能使用DataBinder的,myForm會包含來自DB在HTTP會話
@SessionAttributes("myForm")
從我的控制器,我收到這樣
形式和過程中它加載一些休眠的對象@RequestMapping(value = "/mymapping", method = RequestMethod.POST)
@ResponseBody
public final JsonValidationResponse validateContact(
@ModelAttribute(value = "myForm") final MyForm myForm) {
return jsonValidator.getJsonErrors(myForm.getContact());
}
Contact類具有以下的驗證註解
@Email
private String email;
下面的方法是有問題的
public final <T> JsonValidationResponse getJsonErrors(
final T objectToValidate) {
//TEST CODE HERE
DataBinder binder = new DataBinder(objectToValidate);
binder.setValidator(validator);
binder.validate();
return getJsonErrors(binder.getBindingResult());
}
如果我觀察objectToValidate我看到下面,我想這是因爲它是一個Hibernate對象,並使用暫緩初始化。
com.mypackage.Contact _ _ $$ @ javassist_27 1bdbbc0 [使用ContactID = 0,名字=,電子郵件=,= PHONE1,PHONE2 =,電話3 =,版本= 0,CREATEDATE =,modifiedDate =,用戶id =]
如果我在//TEST CODE HERE
像下面運行objectToValidate一個gettter,我獲得(例如「虛擬」)傳遞正確的值,如果運行這個後,我看到「objectToValidate」它再次顯示了同樣的結果如上甚至儘管現在應該不再使用Lazy初始化了。
String email = (Contact)objectToValidate.getEmail();
如果我在創建一個//TEST CODE HERE
虛擬對象,代碼工作正常和粘結劑發現錯誤。
Contact dummy = new Contact();
dummy.setEmail("dummy");
基本上,binder.getBindingResult()不使用hibernate對象時,我不知道如何解決它。看起來,它無法解析LAZY初始化的hibernate對象屬性(即使在對象上調用方法並獲得正確結果後)。
這就是答案,歡呼聲。 – jax