如何从表单或会话填充ModelAttribute?

时间:2018-09-16 00:25:04

标签: spring-mvc

在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的用例,这是第一个答案中建议的。

1 个答案:

答案 0 :(得分:0)

据我所知,@SessionAttributes的使用是调用已保存的flashAttribute。 您没有提到您正在使用它来保存表单提交中的@ModelAttribute。  提交表单或需要保留表单时,请使用this之类的格式,这会将您的属性保存在会话中,以备日后重用。