По какой-то причине Hibernate, кажется, сохраняет мой сеанс открытым и обновляет объект, а я явно не вызываю save / update / saveorupdate.Я предполагаю, что сессия остается открытой, и она помечена как грязная.
Однако это не желаемое поведение, так каков самый чистый способ исправить это?
Проблема, кажется, возникает, потому что ясохранить номер телефона без форматирования в базе данных, но получатель объекта возвращает отформатированный номер телефона.
Мой поток: перейти к jsp => controller => service => dao
DAOgetter function
if(userId != 0) {
return (User)dbFactory.get(User.class, userId);
}
return null;
Служба просто передает ее в контроллер, и контроллер помещает объект User в область запроса.Я отображаю его на своей странице JSP, используя EL.
edit: я добавил следующее: JSP:
<spring:bind path = "user.telephoneNumber">${user.telephoneNumber}</spring:bind>
Контроллер:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, "telephoneNumber", new TelephoneNumberEditor(false));
}
Редактор: public classTelephoneNumberEditor расширяет PropertyEditorSupport {private boolean isRequired = false;
public TelephoneNumberEditor(boolean isRequired) {
this.isRequired = isRequired;
}
public void setAsText(String text) throws IllegalArgumentException {
String s = null;
if (!this.isRequired && StringUtils.isBlank(text)) {
setValue("");
}
else
{
s = text.replace("(0)","");
s = s.replaceAll("[^0-9]", "");
setValue(s);
}
}
public String getAsText() {
String telephoneNumber = (String) getValue();
if(StringUtils.isBlank(telephoneNumber)){
return "";
} else {
try {
MaskFormatter formatter = new MaskFormatter("+AA AA AA AA AA");
formatter.setValueContainsLiteralCharacters(false);
return formatter.valueToString(telephoneNumber);
} catch (ParseException e) {
return "";
}
}
}
}
И в контроллере я помещаю объект User в область запроса как пользователь.