Передача / связывание частичных объектов с пружинным MVC - PullRequest
4 голосов
/ 25 сентября 2010

Механизм привязки Spring MVC является мощным, но теперь я сталкиваюсь с тривиальной проблемой, которую мне интересно решить:

  • User сущность JPA, которая также используется для привязки и проверки (т. Е. На всех уровнях)
  • Страница «Редактировать профиль», которая не должна изменять пароль или некоторые другие свойства объекта

Два способа, о которых я могу думать:

  1. Использование того же объекта

    • используйте @InitBinder для настройки списка запрещенных свойств
    • получить целевого пользователя (по id)
    • затем используйте утилиту отражения (BeanUtils), чтобы скопировать отправленный объект в целевой объект, но игнорируйте значения null - то есть поля, которые не отправлены
  2. Введите новый объект с необходимым подмножеством полей и используйте BeanUtils.copyProperties(..), чтобы объединить его с сущностью.

Альтернативы

Ответы [ 3 ]

2 голосов
/ 28 сентября 2010

Я обнаружил, что как только ваша веб-модель начинает расходиться от вашего бизнес-уровня в функции, лучше использовать объект уровня представления (объект модели) для сбора или отображения данных

объект:

public class com.myapp.domain.UserEntity {

}

объект модели:

public class com.myapp.somesite.web.SomeSiteUserModel {

   public static SomeSiteUserModel from(UserEntity userEntity) {
      ... initialize model ...
   }

   public UserEntity getModelObject() {
      ... get entity back ... 
   }

}

теперь все операции на основе представления могут передать обработку внутреннему объекту модели, если это имеет смысл, в противном случае он может настроить их сам,Конечно, проблема в том, что вы должны переписать все методы получения и установки для сущности (проблема, с которой мне приходилось сталкиваться, это раздражает), к сожалению, это немного связано с языком Java

1 голос
/ 26 сентября 2010

Я только что проверил два последних весенних проекта, над которыми работал, и в обоих местах используется следующий подход:

На странице JSP формы поле изменения пароля имеет имя, которое не совпадает с именем поля пароля в компоненте User, поэтому оно не сопоставляется с компонентом. Затем в методе onSubmit выполняется отдельная проверка, был ли отправлен новый пароль, и, если это так, изменение отражается явно.

Поздравьте, Васил

0 голосов
/ 03 марта 2014

Вы можете сначала прочитать объект из базы данных, а затем связать запрос. Вы можете найти пример на FuWeSta-Sample .

Используется вспомогательный компонент , который должен быть инициализирован Spring.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...