目前,方法上的@ModelAttribute注释用于绑定模型中的属性。但这是在控制器处理之前发生的。
是否可以在处理控制器之后但在呈现视图之前运行它?
我知道使用拦截器是可行的,但是能够仅为特定控制器执行此操作并将所有代码/配置放在一个位置会很好。
答案 0 :(得分:0)
以下代码不包含任何新的技术知识。但是我发布了这些代码,以便将来可供其他人理解,以供参考。
不,你不能。在控制器操作之前调用@ModelAttribute
。但是你可以通过调用控制器动作代码中的@ModelAttribute
函数来手动覆盖属性。
@ModelAttribute("mySessions")
public Iterable<Session> mySessions(){
return sessionService.findByUser(profileService.me());
}
@RequestMapping(value = "/")
public String index(Model model){
// Your Code ..........
model.addAttribute("mySessions", mySessions());
return "system/home/index";
}
如果模型仅在单个控制器操作中使用,则首选方法是将@ModelAttribute
作为一个整体删除,并在该特定操作中使用Model参数。
@RequestMapping(value = "/")
public String index(Model model){
// Your Code ..........
model.addAttribute("mySessions", sessionService.findByUser(profileService.me()));
return "system/home/index";
}