Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SpringMVC中,如何在控制器之间共享SessionAttribute?_Session_Spring Mvc_Attributes - Fatal编程技术网

在SpringMVC中,如何在控制器之间共享SessionAttribute?

在SpringMVC中,如何在控制器之间共享SessionAttribute?,session,spring-mvc,attributes,Session,Spring Mvc,Attributes,我想使用@SessionAttributes注释在SpringMVC中的两个控制器之间共享会话属性 下面是我用来测试属性共享的简单代码: AController.java @控制器 @会期贡献(“myParam”) 公共类控制器{ @请求映射(value=“/a”) 公共字符串句柄(模型){ 如果(!model.containsAttribute(“myParam”)) addAttribute(“myParam”,randomInt()); 返回“a”; } 私有int randomInt()

我想使用@SessionAttributes注释在SpringMVC中的两个控制器之间共享会话属性

下面是我用来测试属性共享的简单代码: AController.java

@控制器
@会期贡献(“myParam”)
公共类控制器{
@请求映射(value=“/a”)
公共字符串句柄(模型){
如果(!model.containsAttribute(“myParam”))
addAttribute(“myParam”,randomInt());
返回“a”;
}
私有int randomInt(){
返回新的Random().nextInt(100);
}
}
a、 jsp


A页
Param=${myParam}

BController.java

@控制器
@会期贡献(“myParam”)
公共类B控制器{
@请求映射(value=“/b”)
公共字符串句柄(模型){
如果(!model.containsAttribute(“myParam”))
addAttribute(“myParam”,randomInt());
返回“b”;
}
私有int randomInt(){
返回新的Random().nextInt(100);
}
}
b、 jsp


B页
Param=${myParam}

我期望的行为是转到/a URL,myParam将被设置为0到99之间的随机值,然后该值将在两个控制器之间共享

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

一旦两个控制器方法被执行,该值将被共享,但在此之前,每个控制器将重新定义一个新值

似乎如果一个控制器从未为SessionAttribute设置过值,那么如果该属性是由另一个控制器设置的,则它不会检测到该属性

我真的希望能够在不使用HttpSession对象和SpringMVC3对象的情况下在控制器之间共享会话属性

我想知道我是否遗漏了什么,或者是否有其他方法在控制器之间的会话中共享数据


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

在Spring MVC中,@SessionAttributes并不意味着在多个控制器之间共享

我所做的是创建一个具有会话作用域的对象(通过POJO),该对象保存会话所需存储的所有值


然后,我使用JDK动态代理将对象自动连接到控制器。

如果您可以共享如何使用动态代理自动连接共享POJO,这将非常有用。@susithasenarath,如下所示…@Component(value=“registerBean”)@Scope(proxyMode=ScopedProxyMode.TARGET\u CLASS,value=“request”)