2010-10-14 24 views
4

我有一個運行Spring 3.0並使用Spring-MVC的Web應用程序。我已經建立了這樣幾個控制器:是否可以跨多個控制器訪問Spring MVC帶註釋的會話變量?

@Controller 
@RequestMapping("/admin") 
@SessionAttributes({"clientLogin", "selectTab", "user", "redirectUrl"}) 
public class AdminController { 
... 
} 

@Controller 
@SessionAttributes({"clientLogin", "selectTab", "user", "redirectUrl"}) 
public class PublicController { 
.... 
} 

我可以添加一些註釋變量引入ModelMap像

map.addAttribute("user", "Bob"); 

這工作正常,以堅持當前控制器的變量;我可以從該控制器中的任何其他方法訪問modelMap中的var。但是,當用戶點擊另一個控制器中的頁面時,即使@SessionAttributes中列出了相同的變量,但它在第二個控制器中不可用。

是否有可能使用註釋跨多個控制器訪問這些註釋變量?

回答

5

不,這是不可能的 - 在我看來,SessionAttributes被嚴重命名。

如果你想分享不同的控制器這些屬性,你可以明確地把它們放進會話中使用:

session.setAttribute()

+0

這裏有一個相關的討論中,我有,你可能會發現有趣的鏈接:http://forum.springsource.org/showthread.php?t=77305 – 2010-10-18 02:49:37

+0

這很有趣,謝謝。鑑於你遇到的麻煩(儘管它似乎已經從Spring 2.5改爲3.0),你甚至會嘗試使用SessionAttributes嗎? – Travelsized 2010-10-18 13:43:44

+0

它們適合於他們設計的目的 - 簡單的請求 - 響應交互。如果你發現你正在使用多個控制器進行大量的會話風格流程,那麼Spring MVC並不是真正爲此設計的 - 你應該看看Spring Webflow。 – 2010-10-18 22:40:03

0

你可以有一個父類BaseController不必是一個@Controller類並在那裏使用變量@SessionAttibutes({"clientLogin", "selectTab", "user", "redirectUrl"})。請記住,這個類應該屬於MVC的掃描包。然後當你需要在你的實際控制器中使用它時,使用如下所示。

public String getAllDetails(@ModelAttributes("clientLogin") Client client){ 
    client.getName(); 
    return "somejsp"; 
} 
相關問題