Spring MVC 3.1 - атрибут модели потерян

У меня есть быстрый вопрос о области ModelAttributes.

Дев. Env: Spring MVC 3.1/Java 6/JSP с JSTL для представлений

В моем контроллере я добавляю атрибут к модели через

model.addAttribute(“appForResubmission”, appForResubmission);

В JSP (отправленном в ответ на запрос GET) я прочитал его содержимое как:

${appForResubmission.appId} 

— работает нормально, и данные отображаются на JSP, как и ожидалось.

После отправки JSP в том же контроллере другим методом (в ответ на запрос PUT) я пытаюсь прочитать атрибуты из модели для любых изменений, и я делаю это как

@ModelAttribute(“appForResubmission”) Application app

в сигнатуре метода.

Однако все, что я получаю, — это новый объект Application, когда я пытаюсь запросить у объекта данные. В документации Spring говорится, что такое создание нового объекта происходит, когда запрошенный атрибут не существует в модели.

Что может привести к потере атрибута? Любые идеи? Я подозреваю, что это где-то проблема с областью действия, но я не уверен, где может быть проблема.

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

Спасибо, М. Редди.


person M.R.    schedule 03.01.2013    source источник


Ответы (1)


Объем modelattribute равен request, внутренне он просто эквивалентен HttpSerletRequest.setAttribute("model", model).

Если вы хотите, чтобы модель была доступна в другом контроллере, у вас, вероятно, есть два варианта: один — восстановить ее на основе того, что вы отправляете в контроллер, или с использованием вашего постоянного источника. Второй вариант заключается в том, чтобы определенные атрибуты модели добавлялись в сеанс с помощью @SessionAttribute({'modelname'}), но будьте осторожны, вам нужно вызвать SessionStatus.complete, чтобы удалить модель, добавленную в сеанс позже.

person Biju Kunjummen    schedule 03.01.2013
comment
Спасибо за ответ. В моем случае я работаю только с одним контроллером. Два метода, которые я использую, сопоставляются с одним и тем же URL-адресом, за исключением того, что один метод отвечает на GET, а другой — на POST. Я добавляю атрибут модели в GET, а затем по возвращении из JSP (через POST) я пытаюсь получить тот же атрибут. - person M.R.; 03.01.2013
comment
Да, но есть ли у вас поля в JSP для хранения всех полей вашего объекта Application, и отправляете ли вы все эти поля обратно в метод, который обрабатывает ваш PUT, если нет, то они не будут доступны в методе, обрабатывающем PUT. - person Biju Kunjummen; 03.01.2013
comment
Да, у меня есть поля в JSP...‹input type=text value=${appForResubmission.appId} name=appId/›. Однако не все поля отображаются в JSP. - person M.R.; 03.01.2013