Spring MVC - как не потерять значения полей при частичной привязке к форме - PullRequest
7 голосов
/ 29 февраля 2012

Я хочу создать форму обновления для компонента X. Предположим, что этот компонент имеет поля A, B, C, D. В моей форме я хочу обновить только поля A, B и оставить C и D нетронутыми.Есть ли способ привязать bean-компонент X к форме обновления, используя только поля A и B, чтобы при отправке формы C и D не изменялись?

Я знаю, что могу добавить скрытые поля для C и D, но что, если это не примитивные поля, это другие компоненты или коллекции?

Я знаю, что другим решением было бы создание XUpdateBean, которыйбудут иметь только поля A и B, и после отправки формы скопируйте поля из XUpdateBean в мой компонент X.

Есть ли другой способ улучшить это обновление в Spring 3 MVC?

Ответы [ 3 ]

3 голосов
/ 29 февраля 2012

У вас может быть команда-Object / form-barking-Bean, содержащая только те поля, которые вам нужны.

В контроллере вы должны загрузить bean-компонент X и обновить его поля с помощью одногоиз commandObject.

Можно также подумать о том, чтобы не иметь дополнительного класса для commandObject, вместо этого используйте класс BeanX.Но, конечно, вам нужны два экземпляра BeanX, один для commandObject и один для bean x.

0 голосов
/ 21 октября 2014

Правильный способ, на мой взгляд, особенно при работе с Optimistic Concurrency Control (@Version), - временно сохранить атрибут модели в сессии.

0 голосов
/ 01 марта 2012

Извините, я не знаю SpringMVC, поэтому мой ответ может быть неправильным.

С помощью другой структуры привязки, называемой Stripes, мы обычно «гидратируем» данные перед привязкой. Это означает, что вы сначала загружаете bean-компонент из базы данных, и только затем вы привязываете к нему значения A и B! Но он по-прежнему имеет исходные значения C и D, поскольку бин поступает из DB (обычно сущности JPA). Таким образом, вам не нужны скрытые поля C и D!

Это кажется возможным с SpringMVC: Spring MVC 3.0: как связать с постоянным объектом

Обратите внимание, что вы также можете загружать связывание с «bean-компонентом не из БД», как вы это делаете на самом деле (поэтому у вас будут пустые поля C и D, я думаю, если вы не используете скрытые поля) Затем вы можете просто загрузить bean-компонент, который вы хотите изменить, из DB и выполнить слияние между bean-компонентом и db-компонентом нужных вам полей (здесь вы объедините только A и B, так что C и Поля D в компоненте DB не будут изменены)

Здесь вы можете найти некоторые интересные вещи о привязке данных. Для меня в некоторых сложных случаях связывание напрямую с объектами БД может быть опасным: Как эффективно использовать структуру связывания

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