【发布时间】:2019-07-17 01:19:51
【问题描述】:
我们有一个基于球衣的网络应用程序。我们将 Apache Freemarker 用于前端网页。我创建了一个 servlet 过滤器并将其添加到 web.xml 中。 此过滤器拦截所有 http 请求。在该过滤器的 doFilter 方法中,我从请求对象中获取 HTTPSession 并设置 一个属性值。说“myVal”。
myVal 现在应该在 HTTPServletRequest 中的 HTTPSession 上设置。如何在 FTL 页面中访问这个 myVal。 我试图找到一些关于如何检索的帖子 会话,它总是返回 null。
我已将 Freemarker 更新到最新版本:2.3.28
我还尝试将 Freemarker 文档中提到的 servlet[1] 添加到我的 web.xml。
尝试了以下方式访问myVal:
${Request.myVal}
${myVal}
${Request.Session.myVal}
${Session.myVal}
以上所有值均为“null”并抛出以下异常
FreeMarker 模板错误(调试模式;在生产中使用 RETHROW!):以下已评估为 null 或缺失:==> 请求 [in template "home.ftl" at 第 18 行,第 3 列]
---- 提示:如果已知失败的表达式合法地引用了有时为 null 或缺失的内容,请指定一个默认值,如 myOptionalVar!myDefault, 或使用 when-presentwhen-missing。 (这些仅涵盖表达式的最后一步;要涵盖整个表达式,请使用括号: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL 堆栈跟踪(“~”表示与嵌套相关): - 失败于:${Request.Session.user_privilages} [在第 18 行第 1 列的模板“home.ftl”中]
【问题讨论】:
-
FreeMarker 是如何配置的?它是如何调用的?它应该如何知道请求和/或会话对象?或者任何其他值?
-
在应用程序启动时,我们这样做: register(FreemarkerMvcFeature.class);在资源配置上。我们使用 jersey-mvc-freemarker jar。从前端我们对我们的 REST 服务器进行 ajax 调用,它返回一个带有 ftl 名称和所有需要的详细信息的 Viewable。
标签: java jersey freemarker