Spring中的一个ModelAttribute在几个Controller中

时间:2013-04-27 08:46:23

标签: jsp spring-mvc jspx apache-tiles

我在我的系统中使用Spring MVC + Apache Tiles + JSPX开发。

我想在每个页面中添加登录表单。在登录过程中,我想使用@ModelAttribute("loginModel") LoginDTO

在Spring docs页面中,我必须在每个控制器中定义一个方法,我希望在这里显示该模型:

@ModelAttribute("loginModel")
public LoginDTO loginModel() {
   return new LoginDTO();
}

有没有办法只定义一个控制器,并且在我编写登录表单jsp的每个页面都有效?

谢谢你的answare!

2 个答案:

答案 0 :(得分:5)

如果您使用的是Spring 3.2或更高版本,则可以使用新的@ControllerAdvice注释。 来自@ModelAttribute的文档:

  

@ModelAttribute方法也可以在@ ControllerAdvice-annotated类中定义,并且此类方法适用于所有控制器。 @ControllerAdvice注释是一个组件注释,允许通过类路径扫描自动检测实现类。

在你的情况下,我猜它看起来像是:

@ControllerAdvice
public class GlobalControllerAdvice {

    @ModelAttribute("loginModel")
    public LoginDTO loginModel() {
        return new LoginDTO();
    }
}

答案 1 :(得分:0)

你可以用你的loginModel制作抽象控制器并为你想要使用登录表单的每个控制器扩展它,这个抽象控制器应该没有@Controller,所有子类都必须包含@Controller。