2013-12-02 2 views
3

Я хотел бы принять определенные решения по моим представлениям в зависимости от пользователя-агента, но я не хочу делать это с помощью JavaScript.переменная агента инъекции Spring MVC в модель

Таким образом, я решил сделать это на стороне сервера, прочитав HttpServletRequest в моих методах контроллера, затем введет пользовательский агент в модель и покажу jsp, используя JSTL, чтобы проверить введенную переменную.

Дело в том, что я хочу сделать это для всех своих взглядов (некоторые из решений могут быть в основе макета всех страниц), но я не хочу проходить все мои методы управления и ставить model.addAttrbiute() на каждом из них. Есть ли способ сделать эту переменную доступной для всех просмотров?

Я, хотя об использовании @ModelAttribute, но там у меня нет доступа к информации о запросе (или я)?

+0

Для этой цели (выполнить код для каждого обработчика/контроллера) был изобретен «HandlerInterceptor». –

ответ

2

Вы пробовали? Насколько я знаю, «все» возможные параметры, которые можно использовать в методе requestmapping, также можно использовать для методов modelattribute. Вы можете даже объединить эти методы. Я еще не использовал httprequest. Попробуйте.

Объедините это с классом @ControllerAdvice, и вы получите его доступным во всех моделях.

+0

Я не знал о аннотации советника контроллера, я посмотрю на это и попробую. – MichelReap

+0

Вы правы, это работает даже без ControllerAdvice. Благодарю. – MichelReap

+0

Ницца. Да, он работает и без класса controlleradvise'd, но только в классе, где вы определяете метод modelattribute. Функция controlleradvice будет влиять на все сопоставления запросов. –

1

Вы можете использовать аннотацию @ControllerAdvice на уровне класса, которая в результате повлияет на все контроллеры. Объедините его с @ModelAttribute на уровне метода, и вы получите ожидаемый результат.

На доступ к информации запроса:
Один из способов сделать это, чтобы сохранить User-Agent значение в сессии (когда первый запрос был сделан), а затем получить его от сеанса в методе с аннотацией @ModelAttribute:

Таким образом, вы 'имеет значение User-Agent, доступное в каждом представлении, которое возвращается с любого из ваших контроллеров.

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