如何在Spring MVC中的控制器之间共享SessionAttributes?
我想使用@SessionAttributes批注在Spring MVC中共享两个控制器之间的Session Attributes。
这是我用来测试属性共享的简单代码:AController.java
@Controller@SessionAttributes("myParam")
public class AController {
@RequestMapping(value="/a")
public String handle(Model model){
if(!model.containsAttribute("myParam"))
model.addAttribute("myParam", randomInt());
return "a";
}
private int randomInt(){
return new Random().nextInt(100);
}
}
a.jsp
<%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %><html>
<h1>Page A</h1>
<p>Param = ${myParam}</p>
</html>
BController.java
@Controller@SessionAttributes("myParam")
public class BController {
@RequestMapping(value="/b")
public String handle(Model model){
if(!model.containsAttribute("myParam"))
model.addAttribute("myParam", randomInt());
return "b";
}
private int randomInt(){
return new Random().nextInt(100);
}
}
b.jsp
<%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %><html>
<h1>Page B</h1>
<p>Param = ${myParam}</p>
我期望的行为是转到/ a URL,将myParam设置为0到99之间的随机值,然后将在两个控制器之间共享该值。
但是,发生的情况如下:我转到/ a URL,将myParam设置为一个值(假设为10)。然后我转到/ b
URL,将myParam设置为另一个值(比方说20)。当我返回到/ a URL时,myParam值是BController设置的值(myParam =
20)。
一旦执行了两个控制器方法,就可以共享该值,但是在此之前,每个控制器都重新定义了一个新值。
如果某个Controller从未从未将值设置为SessionAttribute,则似乎不会检测到该属性是否由另一个Controller设置。
我真的很希望能够在控制器之间共享会话属性,而无需使用HttpSession对象并坚持使用Spring MVC 3对象。
我想知道我是否错过了一些东西,或者是否有其他做法可以在控制器之间的会话中共享数据。
注意:webapp已部署在Tomcat7服务器上。
回答:
在Spring MVC中,@ SessionAttributes不能跨控制器共享。
相反,我要做的是使用Session范围创建一个对象(通过POJO),该对象包含我需要为Session存储的所有值。
然后,我使用JDK动态代理将对象自动连接到控制器。
以上是 如何在Spring MVC中的控制器之间共享SessionAttributes? 的全部内容, 来源链接: utcz.com/qa/410603.html