如何在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

回到顶部