Мне нужны пояснения по поводу Spring 3.0 MVC и параметра аннотированного метода @ModelAttribute.У меня есть контроллер, который выглядит так:
RequestMapping(value = "/home")
@Controller
public class MyController {
@RequestMapping(method = RequestMethod.GET)
public ModelAndView foo() {
// do something
}
@RequestMapping(method = RequestMethod.POST)
public ModelAndView bar(
@ModelAttribute("barCommand") SomeObject obj) {
// do sometihng with obj and data sent from the form
}
}
, и на моем home.jsp у меня есть такая форма, которая отправляет его данные в метод RequestMethod.POST MyController
<form:form action="home" commandName="barCommband">
</form:form
Теперь, если я пытаюсь получить доступ к home.jsp, я получаю следующее исключение:
java.lang.IllegalStateException:
Neither BindingResult nor plain target object for bean name 'barCommand' available as request attribute
Чтобы решить эту проблему, я обнаружил, что мне нужно добавить параметр
@ModelAttribute("barCommand") SomeObject obj
в Запрос.GET метод MyController, даже если я не буду использовать obj в этом методе.И, например, если добавить в home.jsp другую форму с другим именем команды, например:
<form:form action="home/doSomething" commandName="anotherCommand">
</form:form
, мне также нужно добавить этот параметр в RequestMethod.GET, который теперь будет выглядеть следующим образом:
@RequestMapping(method = RequestMethod.GET)
public ModelAndView foo( @ModelAttribute("barCommand") SomeObject obj1,
@ModelAttribute("anotherCommand") AnotherObj obj2) {
// do something
}
или я получаю такое же исключение.Я спрашиваю, является ли это нормальным поведением Spring 3 MVC или я делаю что-то не так.И почему мне нужно поместить все параметры @ModelAttribute в метод RequestMethod.GET?
Заранее спасибо за помощь
Стефано