因此,我在浏览代码和Internet,以查明为什么它不起作用。
Spring有两个完全独立的模型图- 一个用于标准视图渲染,另一个用于发布重定向时。可以在中观察到ModelAndViewContainer
。
现在,会话属性的持久性基于的结果mavContainer#getModel()
完成。对于重定向方案,这将返回重定向模型。因此,您在标准Model
/ 上设置的任何内容ModelMap
都会丢失。
在谈论标准模型属性时,这很有意义。模型主要用于将对象传递给视图。使用重定向时,您要处理的是完全不同的情况。您想通过HTTP重定向传输对象-因此需要基于字符串和Flash 的分离模型。
但是我的感觉是,在设计此功能时,他们忘记了会话属性。Spring的Jira中有一些不错的讨论,但是没有一个解决这个特定的问题。
而且它 因为这会阻止任何人在使用重定向时设置会话模型属性。强迫Spring通过RedirectAttributes#addFlashAttribute
IMO 来存储您的会话属性是IMO 的一种 。