gpt4 book ai didi

session - 如何在 Spring MVC 中的 Controller 之间共享 SessionAttributes?

转载 作者:行者123 更新时间:2023-12-04 14:32:25 25 4
gpt4 key购买 nike

我想使用 @SessionAttributes 注释在 Spring MVC 中的两个 Controller 之间共享 session 属性。

这是我用来测试属性共享的简单代码:

Controller .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);
}

}

一个.jsp

<%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<html>
<h1>Page A</h1>
<p>Param = ${myParam}</p>
</html>

Controller .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 之间的随机值,然后该值将在两个 Controller 之间共享。

但是,会发生以下情况:
我转到/a URL,myParam 设置为一个值(假设为 10)。
然后我转到/b URL,myParam 设置为另一个值(假设为 20)。
当我返回/a URL 时,myParam 值是 BController 设置的值 (myParam =20)。

一旦执行了两个 Controller 方法,该值就会共享,但在此之前,每个 Controller 都会重新定义一个新值。

似乎如果 Controller 从未为 SessionAttribute 设置值,如果它是由另一个 Controller 设置的,它就不会检测到该属性。

我真的希望能够在不使用 HttpSession 对象并坚持使用 Spring MVC 3 对象的情况下在 Controller 之间共享 session 属性。

我想知道我是否遗漏了什么,或者是否还有其他做法可以在 Controller 之间的 session 中共享数据。

注意:webapp 部署在 Tomcat7 服务器上。

最佳答案

在 Spring MVC 中,@SessionAttributes 并不打算在 Controller 之间共享。

我所做的是创建一个具有 Session 范围的对象(通过 POJO),该对象包含我需要为 Session 存储的所有值。

然后我使用 JDK 动态代理将对象自动连接到 Controller 。

关于session - 如何在 Spring MVC 中的 Controller 之间共享 SessionAttributes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10401402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com