Как работает объект-пакет и ссылка на объект в Spring Web MVC Cycle? - PullRequest
11 голосов
/ 28 августа 2010

Я новичок в Spring Framework и пытаюсь понять функциональность formBackingObject и сравниваю его с методами referenceData , оба эти объекта путают меня, когда я пытаюсь связать их с HTTP-запросомЦикл с точки зрения Spring MVC.

Буду очень признателен, если кто-нибудь сможет объяснить эти два объекта со ссылкой на пример.

Q: В чем разница между formbacking object и reference Data Объектом?

Ответы [ 3 ]

25 голосов
/ 30 августа 2010

Когда вы загружаете веб-страницу, вам нужно передать на нее данные, чтобы она могла отображаться.

Некоторые из этих данных будут чисто информационными, только для чтения; данные, которые нужны странице для отображения, но которые не являются частью текущей транзакции. Примеры: список стран для заполнения раскрывающегося списка, список возможных продуктов, которые пользователь может купить.

Другие данные будут использоваться для чтения и записи: содержимое формы, скажем, должно быть заполнено текущими данными, но также может обновляться пользователем. Этот набор данных будет привязан к форме; данные, отправленные на страницу, будут отображены, данные, отправленные со страницы (пользователем), приведут к обновлению. Примеры: имя пользователя и адрес; текущий заказ.

Все эти данные обычно хранятся в одном или нескольких объектах, к которым странице необходим доступ.

Объекты, содержащие информационные данные, должны быть размещены на карте, предоставленной методом referenceData(). Таких объектов может быть сколько угодно.

Данные для привязки к форме, данные для чтения / записи, должны содержаться в одном объекте. Этот объект должен быть возвращен методом formBackingObject().

Я добавлю, что в более поздних версиях Spring вместо этих «встроенных» методов используются аннотации.

3 голосов
/ 28 августа 2010

Здесь идет formBackingObject API

получение объекта поддержки для текущей формы из данного запроса

Некоторые сценарии

  • Предотвращает исключение NullPointerException при обходе вложенного пути

...

 public class Command {

     private NestedClass nestedPath;

     // getter's and setter's

 }

Примечание над полем nestedPath не было инициализировано .Поэтому, если вы попытаетесь получить его значение в форме, такой как

<spring:form path="nestedPath.someProperty"/> 

Поскольку nestedPath не был инициализирован, вы получите NullPointerException при обходе некоторого свойства nestedPath.Чтобы избежать NullPointException, переопределяет formBackingObject

 public Object formBackingObject(HttpServletRequest request) throws Exception {
     Command command = new Command();
     command.setNestedPath(new NestedClass());

     return command;
 }
  • Сценарий поиска для обновления

Вы передаете идентификатор некоторой команды (обычно с помощью метода GET), чтобы позволить пользователямчтобы обновить его позже

public Object formBackingObject(HttpServletRequest request) throws Exception {
     if(request.getMethod().equalsIgnoreCase("GET")) {
         return commandRepository.findById(Integer.valueOf(request.getParameter("id")));
     }
 }

И referenceData API

создать справочную карту данных для данного запроса

Youиспользуйте referenceData для создания данных, используемых вашей формой, например, списка категорий

protected Map referenceData(HttpServletRequest request) throws Exception {
    return new ModelMap().addAttribute(categoryRepository.findAll()); 
}

На форме

<label>Select category</label>
<form:select path="category">
    <form:option label="Select category" value=""/>
    <form:options items="${categoryList}"
                  itemLabel="WHICH_PROPERTY_OF_CATEGORY_SHOULD_BE_USED_AS_LABEL" 
                  itemValue="WHICH_PROPERTY_OF_CATEGORY_SHOULD_BE_USED_AS_VALUE"/>
</form:select>
1 голос
/ 18 января 2018

Когда вы загружаете веб-страницу, вам необходимо передать на нее данные, чтобы она могла отображаться.

Некоторые из этих данных будут чисто информационными , только для чтения;данные, которые нужны странице для отображения, но которые не являются частью текущей транзакции. Примеры: список стран для заполнения раскрывающегося списка , список возможных продуктов, которые пользователь может купить.

Другие данные будут использоваться для чтения и записи: содержимоеформы , скажем, должны быть заполнены текущими данными, но также могут быть обновлены пользователем.Этот набор данных будет привязан к форме;данные, отправленные на страницу, будут отображены, данные, отправленные со страницы (пользователем), приведут к обновлению.Примеры: имя пользователя и адрес;текущий порядок.

Все эти данные обычно хранятся в одном или нескольких объектах, к которым требуется доступ к странице.

Объекты, содержащие информационные данные, следует размещать на предоставленной карте.с помощью метода referenceData (). Таких объектов может быть сколько угодно.

Данные для привязки к форме, данные для чтения / записи, должны содержаться водин объект.Этот объект должен быть возвращен методом formBackingObject ().

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