当前位置: 首页 > 知识库问答 >
问题:

Thymeleaf:使用#ses-异常评估SpringEL表达式的偶尔错误

刘兴修
2023-03-14

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

有点新的百里香叶,我知道百里香叶有2种方法来解决会议即。${session.something}和$ { # session . get attribute(' 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)是否为空。所以我有个问题-

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

共有1个答案

云丰
2023-03-14

根据文件:

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

在我的测试中,#ses在会话过期时为null。如果用户的会话过期,使用#ses会抛出空点异常(方法调用:尝试在空上下文对象上调用方法getAtcade(java.lang.String))。您应该能够通过删除您的JSESSIONIDcookie来测试这一点。

另一方面,< code>${session}是一个< code > session attributes map ,它似乎从不为空,即使没有有效的会话。在这种情况下,表达式< code > $ { session . boolean attribute } 仍然有效,只是计算结果为false。

 类似资料:
  • 问题内容: 我正在寻找一种相对简单的方法(与编写解析器相比)来评估Java中的布尔表达式,并且我不想使用JEP库。 我有一个String表达式,例如:我的目标是用值替换变量。 有没有一种方法可以评估此​​表达式? 请记住,这可以是任何深度,因此编写解析器将非常复杂。 问题答案: 您可以使用Java6中的脚本引擎,并选择任何流行的脚本语言,例如Scala,Ruby,Python,Groovy和Jav

  • 错误4904---[nio-8080-exec-1]org.THYMELEAF.templateEngine :[THYMELEAF][http-nio-8080-exec-1]异常处理模板“index”:模板分析期间出错(模板:“class path resource[templates/index.html]”) org.thymeleaf.exceptions.templateInputEx

  • 问题内容: 我如何布尔计算包含布尔表达式的字符串?喜欢: 用户应该能够定义自己的变量(),并定义自己的布尔表达式()。因此,我将所有表达式仅作为字符串使用。我如何评估它们? 问题答案: 您可以使用Nambari评论的ScriptEngine: 打印0。 还要注意,该表达式不是布尔表达式,而是按位运算。

  • 问题内容: 对象在Python中评估的真值是多少? 相关问题 Python中对象的布尔值:有关覆盖对象评估方式的讨论 问题答案: 可以测试任何对象的真值,以在if或while条件中使用或用作以下布尔运算的操作数。以下值为“假”: 没有 假 任何数值类型的零,例如,,,。 任何空序列,例如,,。 任何空映射,例如。 用户定义的类的实例,如果该类定义了或方法,则该方法返回整数0或bool value时

  • 我在服务类中编写了一个函数,在该函数中,我评估了从控制器传递的参数,但Grails返回了错误的评估结果。 所有这些调试语句按预期打印为null。现在 两个语句在返回true时都应该返回false,这是怎么回事?有什么想法吗? 我正在使用grails 2.4.2

  • 问题内容: 假设我有以下表达式 Eclipse警告我,布尔表达式的第二个短语中可能为空。但是,我知道有些人会在第一个条件失败的情况下完全退出布尔表达式。Java是否正确?还是不能保证评估顺序? 问题答案: 但是,我知道有些人会在第一个条件失败的情况下完全退出布尔表达式。Java是否正确? 是的,这就是所谓的短路评估。操作员喜欢和是执行此类操作的操作员。 还是不能保证评估顺序? 不,可以保证评估的顺