У меня есть атрибут сеанса, Myform содержит некоторые объекты Hibernate загружаются из БДНевозможно использовать DataBinder на объекте спящего режима в сеансе 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());
}
Контактная класс имеет следующие проверки аннотацию
@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 я вижу следующее, я думаю, это потому, что является объектом спящего режима и использует отложенную инициализацию.
com.mypackage.Contact _ $$ _ javassist_27 @ 1bdbbc0 [ContactId = 0, имя =, электронная почта =, Phone1 =, phone2 =, phone3 =, версия = 0, createDate =, ModifiedDate =, = идентификатор пользователя]
Если я бегу gettter на objectToValidate в //TEST CODE HERE
, как показано ниже, я получить правильное значение, переданное в («пустышки», например), если после выполнения этого я наблюдаю «objectToValidate» снова показывает тот же результат, как и выше, даже хотя теперь он уже не должен быть Lazy инициализирован.
String email = (Contact)objectToValidate.getEmail();
Если создать фиктивный объект в //TEST CODE HERE
, код работает отлично и связующие находит ошибку.
Contact dummy = new Contact();
dummy.setEmail("dummy");
В основном binder.getBindingResult() не при использовании объекта спящего режима, и я не знаю, как это исправить. Похоже, что он не может разрешить свойства объекта hibernate, которые LAZY инициализированы (даже после вызова метода на объект и получения правильного результата).
Это был ответ, ура. – jax