我们有一个基于运动衫的网络应用程序。我们使用Apache Freemarker作为前端网页。我创建了一个servlet Filter并将其添加到web.xml中。此过滤器拦截所有http请求。在该Filter的doFilter方法中,我从请求对象获取HTTPSession并设置属性值。说“myVal”。
现在应该在HTTPServletRequest中的HTTPSession上设置myVal。如何在FTL页面中访问此myVal。我试图找到一些关于如何检索会话的帖子,它总是返回null。
我已将Freemarker更新到最新版本:2.3.28
我还尝试将Freemarker文档中提到的servlet [1]添加到我的web.xml中。
尝试了以下访问myVal的方法:
$ {} Request.myVal
$ {weval}
$ {} Request.Session.myVal
$ {} Session.myVal
以上所有值均为“null”,并抛出以下异常
FreeMarker模板错误(DEBUG模式;在生产中使用RETHROW!):以下评估为null或缺失:==>请求[在模板“home.ftl”第18行第3列]
----提示:如果已知失败的表达式合法地引用有时为null或缺失的内容,则指定默认值,如myOptionalVar!myDefault,或使用<#if myOptionalVar ??> when-present <#else>时-失踪。 (这些仅涵盖表达式的最后一步;要覆盖整个表达式,请使用括号:(myOptionalVar.foo)!myDefault,(myOptionalVar.foo)?? ---- ---- FTL堆栈跟踪(“〜”表示嵌套相关): - 失败于:$ {Request.Session.user_privilages} [在模板“home.ftl”第18行第1列]
据我所知,在source code中,jersey-mvc-freemarker
不会为FreeMarker模型添加任何额外的值。
这意味着它只能看到你添加的内容。如果您希望模板看到Session
,那么您需要将Session
添加到模型中。