我想在Spring MVC中使用@SessionAttributes註釋來分享兩個控制器之間的Session Attributes。如何在Spring MVC中的控制器之間共享SessionAttributes?
下面是一個簡單的代碼我用來測試的屬性共享: 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>
我期望的行爲是去/ 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服務器上。
如果您可以分享,您將如何使用動態代理自動裝配共享POJO。 –
@susithasenarath像這樣.... @ Component(value =「registerBean」) @Scope(proxyMode = ScopedProxyMode.TARGET_CLASS,value =「request」) – beinghuman