我使用的是Spring 4.3.7,我在相应的视图中使用Spring form taglib获得了两个表单控制器。为了在请求之间保留表单数据(用于呈现无效表单),我将它们存储在SessionAttributes中。
LabCreateController:
@Controller
@RequestMapping(path = "/labs/create")
@SessionAttributes("form")
public class LabCreateController {
@ModelAttribute("form")
public LabCreateForm form() {
return new LabCreateForm();
}
@GetMapping
public String showForm() {
return "lab_create";
}
}
WallController:
@Controller
@RequestMapping(path = "/group/{id}/wall")
@SessionAttributes("form")
public class WallController {
@ModelAttribute("form")
public PostCreateForm form() {
return new PostCreateForm();
}
@GetMapping(path = "/new")
public String newPostGet() {
return "communities_newpost";
}
}
我在浏览器中打开/labs/create
,一切都很好。然后我打开/group/4/wall/new
并收到以下错误:
无效的属性' text'豆类 [... LabCreateForm]
即表示来自form
的属性LabCreateController
以某种方式传递给WallController
,尽管Spring文档说:
使用此注释指示的会话属性对应于a 特定处理程序的模型属性。
我相信这意味着他们不应该在控制器之间共享。另外this answer说从春季开始就是如此。
这是一个错误还是我错过了什么?如果没有,在一个控制器内存储表单的适当方法是什么?