Как отобразить общую информацию в нескольких представлениях в приложении MVC? - PullRequest
1 голос
/ 02 ноября 2009

Каков наилучший способ обмена общими объектами между несколькими представлениями в приложении MVC?Скажем, у меня есть LoginController, который берет имя пользователя и пароль, аутентифицирует пользователя и загружает его данные (данные учетной записи, полное имя и т. Д.).Я хочу отобразить это на каждой странице - что-то вроде заголовка с надписью "Welcome <user name>, у вас есть <account value> в вашей учетной записи".Я не думаю, что я должен просто сохранить этот пользовательский объект в сессии.Нужно ли мне возвращать его с каждым контроллером?

Я использую среду Spring для этого приложения, но я не думаю, что это имеет значение.Должен быть какой-то общий способ обработки этого общего случая использования.

Обновление

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

Ответы [ 3 ]

2 голосов
/ 02 ноября 2009

Вы на самом деле не делитесь общими объектами - это общие данные (и да, обернутые объектом). Допустим, у вас есть минимальный класс UserInfo и соответствующий фрагмент шаблона, который отображает его. Этот фрагмент будет включен в ваши взгляды.

Но независимо от платформы (и от того, как вы добавляете этот общий фрагмент в ваши представления), механизму фреймворка / шаблонов потребуется найти привязку 'userInfo' и получить необходимые поля.

Если вы не планируете использовать свой (db) бэкэнд при каждом запросе страницы для получения этой информации, вам придется ее кешировать. Обычно это будет в сеансе.

1 голос
/ 02 ноября 2009

Если с общими элементами достаточно много логики, может быть проще выполнить подзапрос, используя ServletRequest.getRequestDispatcher() aka <jsp:include />, тогда вы можете снова пройти весь цикл обработки запроса с помощью «Sub». -Контроллер "и" Подвид ".

РЕДАКТИРОВАТЬ : посмотрите на Spring MVC HandlerInterceptor s

0 голосов
/ 02 ноября 2009

Я уже обрабатывал этот точный вариант использования в приложении Spring MVC, добавив HandlerInterceptor ( ссылка Javadoc ), чтобы добавить эти детали в ModelAndView для всех страниц, Мне это было нужно.

Так как основная цель HandlerInterceptor состоит в том, чтобы иметь возможность применять общую функциональность ко многим запросам и / или ответам с помощью одного куска кода, это естественное соответствие. Перехватчик позволяет подключиться к шагу контроллера до или после обработки; и вы можете настроить UrlHandlerMapping так, чтобы перехватчик применялся только к определенным URL-адресам (или шаблонам URL-адресов), если вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...