And*_*ndy 5 java spring spring-mvc
为简单起见,这些代码片段将缩短.这样做的目的是获取GET参数,在会话上设置它,并在删除url参数的情况下重定向回GET.基本上,URI清理.如果有更好/更简单的方法,我会很高兴听到它.
我有一个控制器定义如下:
@Controller
@RequestMapping("/path/page.xhtml")
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
@SessionAttributes({ "myParam1", "myParam2" })
public class MyController {
@RequestMapping(method = RequestMethod.GET, params = { "urlParam2" })
public String handleUriParam(@RequestParam(value = "urlParam2", required = false)
final Long urlParam2,
final RedirectAttributes redirs) {
// at this point, myParam1 is set on the session.
// now set the param as a flash attrib with the name of the session variable
redirs.addFlashAttribute("myParam2", urlParam2);
return "redirect:/path/page.xhtml";
}
@RequestMapping(method = RequestMethod.GET, params = {})
public String doGetStuff(ModelMap model) {
// do stuff using myParam1 and myParam2.
// problem is, myParam2 is on the session, but myParam1 is not!
}
}
Run Code Online (Sandbox Code Playgroud)
就像代码所说的那样,myParam1当重定向发生时,某种程度上是未设置的.我可以通过传递ModelMap给handleUrlParam方法并手动添加myParam1到flash属性来解决这个问题,但这似乎打败了我的想法.
为什么SessionAttribute myParam1在重定向后删除?
有没有更好的方法从URI中提取参数并将它们放在会话中?
UPDATE
因此,无论何时使用RedirectAttributes,您都必须确保将SessionAttribute要携带的任何内容放入FlashAttributes的重定向中,否则它们将丢失.我想这会发生,因为SessionAttributes被拉掉了ModelMap(使用时被FlashAttributes取代).这是Spring中的错误还是故意行为?如果是故意的,有人可以解释原因吗?我认为SessionAttribute这是为了留下来,直到完成对话会话.
附录
根据所提供的答案,我仍然难以理解如何在将URI参数放入用户会话时清除它们.我考虑过的一个选项是为我试图存储的半原始对象(java.lang.Integer,java.lang.String)创建一个包装器,因为它们不会放在URI字符串上,但这似乎很难得我.如果有人有更好的方式接受GET参数,将它们存储在用户的会话中,并清除用户地址栏中的那些(这将需要重定向),我很乐意使用它.
所以我在寻找代码和互联网,找出它为什么不起作用.
Spring有两个完全独立的模型映射 - 一个用于标准视图渲染,另一个用于发布重定向.这可以在ModelAndViewContainer.
现在会话属性持久性基于来自的结果mavContainer#getModel()完成.对于重定向方案,这将返回重定向模型.因此,无论你在标准上设置什么Model/ ModelMap都会丢失.
在谈论标准模型属性时,这是有意义的.Model主要是将对象传递给视图.使用重定向时,您处理的是完全不同的情况.您希望通过HTTP重定向传输对象 - 因此分离的字符串和基于闪存的模型.
但我的感觉是他们在设计此功能时忘记了会话属性.在Spring的Jira中有一些很好的讨论,但是没有一个讨论这个特定的问题.
所以是的......这可能是Spring的Jira的主题.它可能被归类为错误,因为这可以防止任何人在使用重定向时设置会话模型属性.强制Spring存储你的会话属性RedirectAttributes#addFlashAttribute是IMO一个黑客和一种自己的bug.
| 归档时间: |
|
| 查看次数: |
4379 次 |
| 最近记录: |