【问题标题】:Thymeleaf: Occasional error using #session - Exception evaluating SpringEL expressionThymeleaf:使用 #session 时偶尔出错 - 评估 SpringEL 表达式时出现异常
【发布时间】:2019-03-02 18:10:11
【问题描述】:

我们正在使用 Spring webflow + ThymeLeaf 并尝试在 html 页面中访问 session.getAttribute()。

对 Thymeleaf 有点陌生,我知道 Thymeleaf 有两种方法来处理会话,即。 ${session.something} 和 ${#session.getAttribute('something')}。

我们使用的代码如下所示,偶尔会失败。

<div th:if="${(#session.getAttribute('booleanAttribute'))}">  
...
</div>

在本地环境中,我从来没有看到失败,它按预期工作。在生产中,这失败了。 30 分钟内 200 次出现以下错误 -

org.thymeleaf.exceptions.TemplateProcessingException:  Exception evaluating SpringEL expression: "(#session.getAttribute('booleanAttribute'))" (template: "base" - line 80, col 10)

我不太愿意在不了解为什么在本地正常工作的情况下进行空检查以查看 (#session) 是否为空。所以我有这个问题 -

上面可能有什么问题,我如何在本地重现,以便确认我放置的修复程序适用于所有环境?

【问题讨论】:

    标签: thymeleaf cas


    【解决方案1】:

    根据docs:

    #session:直接访问与当前请求关联的 javax.servlet.http.HttpSession 对象。

    在我的测试中,#session 在会话到期时为空。在用户会话过期的情况下,使用 #session 会引发空点异常 (Method call: Attempted to call method getAttribute(java.lang.String) on null context object)。您应该可以通过删除您的 JSESSIONID cookie 来测试这一点。

    另一方面,${session} 是SessionAttributesMap,它似乎永远不会为空——即使没有有效的会话。在这种情况下,表达式 ${session.booleanAttribute} 仍然有效,只是计算结果为 false。

    【讨论】:

      猜你喜欢
      • 2017-04-20
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      相关资源
      最近更新 更多