2013-07-26 2 views
2

Я использую объекты ModelAndView, как и все люди:Spring MVC: по умолчанию просматривать объекты

ModelAndView result = new ModelAndView("view"); 
result.addObject("requests", requestsService.getListByBackoffice(filter, page, Config.RECORDS_PER_PAGE)); 

Но я заметил, что у меня есть несколько объектов, которые я использую всегда в большинстве взглядов .. Так что вопрос - Существуют ли какие-либо решения для создания каких-либо объектов, назначенных по умолчанию, которые автоматически передаются для просмотра?

Спасибо

+0

Либо сервлет 'Фильтр', либо Spring' HandlerInterceptor'. –

+0

@SotiriosDelimanolis Вы можете указать пример или ссылку на него? – nKognito

ответ

4

Вы можете зарегистрировать HandlerInterceptor с DispatcherServlet. Затем реализовать postHandle() метод:

public class CustomInterceptor extends HandlerInterceptorAdapter /* which implements HandlerInterceptor */ { 

    @Override 
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { 
     modelAndView.addObject("myObject", new Object()); 
     // add as many as you wish     
    } 

} 

ПРИМЕЧАНИЕ: Объект ModelAndView может быть null. Это может произойти, если ваш метод обработчика напрямую записывался в тело ответа, например, с помощью @ResponseBody.

В зависимости от шаблона url, который вы использовали при регистрации перехватчика, postHandle() будет вызываться и заполнять вашу модель любыми объектами, которые вы хотите.

Вы также можете зарегистрировать сервлет Filterweb.xml или WebApplicationInitializer). Фильтр просто добавляет атрибуты запроса перед отправкой на сервлет.

public class CustomFilter implements Filter { 
    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     request.setAttribute("myObject", new Object()); 
     chain.doFilter(request, response); 
    } 
    // ... init and destroy methods 
} 

ПРИМЕЧАНИЕ: В какой-то момент в течение жизненного цикла запроса, Spring добавляет все атрибуты в model ваших атрибутов запроса.

Недостаток заключается в том, что вы добавляете атрибуты, независимо от того, работал ли ваш @Controller, так как Filter вызывается до весны DispatcherServlet. Кроме того, Filter управляется вашим контейнером сервлетов (обходные пути существуют), и поэтому его трудно вводить в него весенние бобы.

+0

Руководство по регистрации перехватчика здесь: http://www.baeldung.com/spring-mvc-handlerinterceptor –

0

первое решение:

Я не пробовал такие, но может сделать, как создать объект ModelAndView в конструкторе или где-то, что вы называете всегда, установить объект, который вы всегда хотите пройти туда только по умолчанию , вызовите setViewName() в соответствующие методы и добавьте соответствующие объекты, которые вы хотите установить.

второе решение:

написать один метод, который добавляет, что объект по умолчанию и вызвать этот метод везде, где вам не нужно (ничего, кроме того, что перехватчик делать).

Смежные вопросы