我有一个运行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中列出了相同的变量,它也不会在第二个控制器中可用。
是否可以使用注释在多个控制器中访问这些带注释的变量?
答案 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";
}