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.

Другие вопросы по тегам