是否可以跨多个控制器访问Spring MVC带注释的会话变量?

时间:2010-10-14 14:51:06

标签: spring session spring-mvc controller session-variables

我有一个运行Spring 3.0并使用Spring-MVC的Web应用程序。我有几个控制器设置如下:

@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。但是当用户访问另一个Controller中的页面时,即使@SessionAttributes中列出了相同的变量,它也不会在第二个控制器中可用。

是否可以使用注释在多个控制器中访问这些带注释的变量?

2 个答案:

答案 0 :(得分:5)

不可能 - 在我看来,SessionAttributes命名很差。

如果要跨不同控制器共享这些属性,可以使用以下命令将它们显式地放入会话中:

session.setAttribute()

答案 1 :(得分:0)

您可以拥有一个父类BaseController,它不必是@Controller类,并在那里使用变量@SessionAttibutes({"clientLogin", "selectTab", "user", "redirectUrl"})。请记住,这个类应该属于MVC的扫描包。然后,当您需要在实际控制器中使用它时,如下所示。

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