我需要一些關於Spring 3.0 MVC和@ModelAttribute註釋方法參數的說明。我有一個控制器,它看起來像這樣的:Java - 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的
<form:form action="home" commandName="barCommband">
</form:form
的RequestMethod.POST方法現在形式如果我嘗試訪問回到Home.jsp我得到這個異常:
java.lang.IllegalStateException:
Neither BindingResult nor plain target object for bean name 'barCommand' available as request attribute
要解決此我發現我需要添加
@ModelAttribute("barCommand") SomeObject obj
參數給MyController的Request.GET方法,即使我不會在該方法中使用obj。再舉例來說,如果添加另一種形式具有不同的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行爲,或者如果我做錯了什麼。爲什麼我需要將所有@ModelAttribute參數放在RequestMethod.GET方法上?
在此先感謝您的幫助
斯特凡諾