Freemarker - атрибут HTTPSession возвращает ноль - PullRequest
0 голосов
/ 23 февраля 2019

У нас есть веб-приложение на основе джерси.Мы используем Apache Freemarker для интерфейсных веб-страниц.Я создал фильтр сервлета и добавил его в наш web.xml.Этот фильтр перехватывает все запросы http.В методе doFilter этого фильтра я получаю HTTPSession от объекта запроса и устанавливаю значение атрибута.Скажите «myVal».

myVal теперь должен быть установлен на HTTPSession в HTTPServletRequest.Как я могу получить доступ к этому myVal на странице FTL.Я попытался найти несколько сообщений о том, как получить сессию, и она всегда возвращает ноль.

Я обновил Freemarker до последней версии: 2.3.28

Я также попытался добавить сервлет[1] упоминается в документации Freemarker к моему web.xml.

Попробовал следующие способы доступа к myVal:

$ {Request.myVal}

$ {myVal}

$ {Request.Session.myVal}

$ {Session.myVal}

Все вышеприведенные значения являются «нулевыми», и генерируется следующее исключение

Ошибка шаблона FreeMarker (режим DEBUG; используйте RETHROW в рабочей среде!): Следующее значение равно нулю или отсутствует: ==> Запрос [в шаблоне "home.ftl" в строке 18, столбец 3]

---- Совет: если известно, что ошибочное выражение юридически ссылается на что-то, что иногда является нулевым или отсутствует, либо укажите значение по умолчанию, например myOptionalVar! MyDefault, либо используйте <#if myOptionalVar ??> when-present <#else>когда пропущенное.(Они охватывают только последний шаг выражения; для охвата всего выражения используйте круглые скобки: (myOptionalVar.foo)! MyDefault, (myOptionalVar.foo) ?? ---- ---- Трассировка стека FTL ("~"означает «связанные с вложением»): - Ошибка: $ {Request.Session.user_privilages} [в шаблоне «home.ftl» в строке 18, столбец 1]

1 Ответ

0 голосов
/ 23 февраля 2019

Насколько я вижу в исходном коде , jersey-mvc-freemarker не добавляет никаких дополнительных значений к модели FreeMarker.

Это означает, что он может видеть только то, что вы добавляете.Если вы хотите, чтобы шаблон видел Session, то вам нужно добавить Session к модели.

...