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には、彼のデータをMyControllerのRequestMethod.POSTメソッドに送信するこのようなフォームがあります
<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
そのメソッドでobjを使用しない場合でも、MyControllerのRequest.GETメソッドへのパラメーター。たとえば、次のように別の commandName を使用して別のフォームを 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 の動作なのか、それとも何か間違っているのかということです。RequestMethod.GET メソッドにすべての @ModelAttribute パラメータを配置する必要があるのはなぜですか?
助けてくれてありがとう
ステファノ