@ModelAttribute postHandle

时间:2015-03-06 11:46:44

标签: spring spring-mvc

目前,方法上的@ModelAttribute注释用于绑定模型中的属性。但这是在控制器处理之前发生的。

是否可以在处理控制器之后但在呈现视图之前运行它?

我知道使用拦截器是可行的,但是能够仅为特定控制器执行此操作并将所有代码/配置放在一个位置会很好。

1 个答案:

答案 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";
}