我在我的系统中使用Spring MVC + Apache Tiles + JSPX开发。
我想在每个页面中添加登录表单。在登录过程中,我想使用@ModelAttribute("loginModel")
LoginDTO
在Spring docs页面中,我必须在每个控制器中定义一个方法,我希望在这里显示该模型:
@ModelAttribute("loginModel")
public LoginDTO loginModel() {
return new LoginDTO();
}
有没有办法只定义一个控制器,并且在我编写登录表单jsp的每个页面都有效?
谢谢你的answare!
答案 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。