Является ли идентификатор HttpSession Java видимым для шаблонов FreeMarker? - PullRequest
2 голосов
/ 30 марта 2012

Из шаблона FreeMarker в веб-приложении Java EE мне нужно получить доступ к sessionID (т.е. HttpSession.getId()). Короче говоря, он передается стороннему поставщику аналитики, чтобы они могли создавать отчеты о том, что пользователи делают во время сеанса просмотра.

Очевидно, я просто добавляю идентификатор сеанса к объекту модели, который передается во FreeMarker. Однако это приложение немного беспорядочно ... один шаблон FreeMarker может использоваться несколькими контроллерами, передающими различные объекты модели. Для удобства обслуживания было бы гораздо проще, если бы я мог просто получить доступ к идентификатору сеанса из шаблона FreeMaker без необходимости изменения всех этих классов моделей.

Я нашел Документация FreeMarker со ссылкой на область "application", "session" и "request". Однако этот формат не возвращает значение:

${Session.id}

Я подозреваю, что "атрибуты области действия" включают не все методы получения объекта HttpSession (например, getId()) ..., а только те значения, которые можно извлечь из HttpSession.getAttribute().

Существует ли простой способ доступа к идентификатору сеанса Java EE из шаблона FreeMarker без явной передачи его через объект модели?

1 Ответ

2 голосов
/ 30 марта 2012

Вы можете поместить его в модель перед визуализацией шаблона.

Обычно вы можете поместить объект request в модель в некотором базовом методе, который вызывается при визуализации всех шаблонов.Таким образом, все шаблоны будут иметь запрос, который вам все равно нужен.Затем вы получаете доступ к сеансу через объект запроса.Это то, что мы сделали, и это прекрасно работает.

...