我有很多页面使用相同的表单,我使用commandName绑定对象。我尝试将对象放到名为“myObject”的会话中,并将其用于表单(commandName =“myObject”)。但是系统抛出异常(BindingResult和bean名称“myObject”都没有普通的目标对象)。 如何将对象绑定到任何控制器和请求的会话?
答案 0 :(得分:1)
当您使用针对请求中不可用的命令对象的form:form
标记时,通常会出现此错误。
一个好的方法是将@ModelAttribute
带注释的方法与@SessionAttributes
结合在一个控制器上,该控制器最初会转发到包含表单的视图,例如
@Controller
@SessionAttributes("myObject")
public class FormController {
@ModelAttribute("myObject")
public MyObject createMyObjectBean() {
return new MyObject();
}
...
}
初始createMyObjectBean
将使用对控制器方法的第一个请求进行调用,但在后续请求中不会调用它,因为myObject
值将来自会话,因为{{ 1}}
请注意,要使用此方法,您必须拥有一个转发到包含表单的视图的控制器