Spring один ModelAttribute в нескольких контроллерах
Я разрабатываю в Spring MVC + Apache Tiles + JSPX в своей системе.
Я хотел бы разместить форму входа на каждой странице. В процессе входа в систему я хотел бы использовать @ModelAttribute("loginModel")
LoginDTO
На странице документов Spring я добавил, что должен определить метод в каждом контроллере, где я хочу отобразить эту модель следующим образом:
@ModelAttribute("loginModel")
public LoginDTO loginModel() {
return new LoginDTO();
}
Есть ли способ, которым я определяю это только один контроллер, и работает на каждой странице, где я пишу форму входа JSP?
Спасибо, ваш ответ!
2 ответа
Если вы используете Spring 3.2 или новее, вы можете использовать новую аннотацию @ControllerAdvice. Из документации @ModelAttribute:
Методы @ModelAttribute также могут быть определены в аннотированном классе @ ControllerAdvice, и такие методы применяются ко всем контроллерам. Аннотация @ControllerAdvice - это аннотация компонента, позволяющая автоматически определять классы реализации посредством сканирования пути к классам.
В вашем случае, я думаю, это будет выглядеть примерно так:
@ControllerAdvice
public class GlobalControllerAdvice {
@ModelAttribute("loginModel")
public LoginDTO loginModel() {
return new LoginDTO();
}
}
Вы можете создать абстрактный контроллер с помощью вашего loginModel и расширить его для каждого контроллера, в котором вы хотите использовать форму входа, этот абстрактный контроллер должен быть без @Controller, все подклассы должны содержать @Controller.