我使用过Spring MVC。我将会话属性值设置为
@RequestMapping(value = "/home", method = RequestMethod.GET)
public String initHome(Model model) {
if (!model.containsAttribute("clientObject")) {
model.addAttribute("clientObject", createDefaultClient());
}
return "homeMenu";
}
如果我点击主菜单网址(/ home),它工作正常。但如果我没有去 home意味着它将错误称为“会话属性clientObject是必需的”
所以我决定在控制器
的构造函数中设置sessionattibutes @Autowired
public MyController(Model model) {
if (!model.containsAttribute("clientObject")) {
model.addAttribute("clientObject", createDefaultClient());
}
}
它也说错误
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myController
'
我尝试使用RequestMapping设置也像
@RequestMapping(value = "/", method = RequestMethod.GET)
public void initController(Model model) {
if (!model.containsAttribute("clientObject")) {
model.addAttribute("clientObject", createDefaultClient());
}
}
此方法也未被初步调用 我的投币器看起来像
@RequestMapping("/sample")
public class MyController {
..
..
是否可以在控制器的构造函数中设置sessionAttribute值?或者最初设置会话属性的任何其他方式?
提前感谢您的帮助。
答案 0 :(得分:3)
假设您的createDefaultClient
位于控制器中,请为其添加@ModelAttribute
注释。
@ModelAttribute("clientObject")
public ClientObject createDefaultClient() { ... }
此方法将在任何请求处理方法之前调用(如reference guide中所述)
如果您将其与类@SessionAttribute
注释组合在一起(您可能已经拥有)。你应该能够实现你想要的目标。
在请求处理方法(使用@RequestMapping注释的方法)中,您现在可以简单地将客户端对象作为方法参数注入。
@RequestMapping(value = "/home", method = RequestMethod.GET)
public String initHome(@ModelAttribute("clientObject") ClientObject clientObject) {
// Do something with the clientObject
return "homeMenu";
}
这只能在同一个控制器中一致地工作,所以如果你需要在其他地方使用ClientObject
(例如另一个控制器),这是行不通的(@SessionAttributes
也不行专为此而设计。