在Spring MVC中,我有一个@RequestMapping
,它接收一个复杂的对象作为@ModelAttribute
。
该对象来自HTML输入表单。但是现在我还有另一个用例,我需要保留会话中最后一个提交的对象,直到下次提交表单为止。
因此,我还声明了一个同名的@SessionAttributes
。
代码:
@SessionAttributes("searchRequestDto")
...
@RequestMapping(value = "/test")
public String search(@ModelAttribute SearchRequestDto searchRequestDto, HttpServletRequest request, Model model) {
...
不幸的是,即使提交了表单,现在searchRequestDto
的值也未初始化(新实例化)。
TL; DR:
如何声明参数,以便表单中的值自动存储并在会话中可用?
更多详细信息
该网站具有复杂的搜索表单(类似于机票或酒店搜索,您必须在其中输入城市,日期,服务等级等)。无论用户是下一页命中还是“ N”页命中数还是“ X”小时后,无论用户是在先前提交了搜索表单之后,只要用户返回到搜索表单,都应为预填充了他们的最后搜索输入。我不认为这是flashAttribute的用例,这是第一个答案中建议的。
答案 0 :(得分:0)
据我所知,@SessionAttributes
的使用是调用已保存的flashAttribute
。
您没有提到您正在使用它来保存表单提交中的@ModelAttribute
。
提交表单或需要保留表单时,请使用this之类的格式,这会将您的属性保存在会话中,以备日后重用。