如何在 thymeleaf 的 SpEL 中转义 '-'

How to escape '-' in SpEL in thymeleaf

在我的 Spring 控制器中,我为我的模型属性设置了以下内容:

model.addAttribute("abc-def", "Hello World");

在我的 thymeleaf html 中,我想读取 abc-def 的值。

<th:block th:text="${abc-def}"></th:block>

但我收到错误:

The operator 'SUBTRACT' is not supported between objects of type 'null' and 'null'

很清楚,因为-是一个算术运算符。 有没有办法逃避-读取模型值?

我的建议是:不要使用带有破折号的变量名。 (你会尝试在 java 中定义一个变量 int abc-def = 5; 吗?)

无论如何,如果你必须使用它,这似乎是可行的:

<th:block th:text="${#request.getAttribute('abc-def')}" />

百里香叶 2

根据 Expression Basic Objects section of the documentation (with more details in Appendix A),上下文变量位于 #vars 对象中。所以,你可以像这样访问变量:

<th:block th:text="${#vars.get('abc-def')}" />

百里香叶 3

正如银河战士评论的那样,Thymeleaf 3 中的所有更改。It combines the #ctx and #vars objects, so you need to use the Context's getVariable 方法:

<th:block th:text="${#ctx.getVariable('abc-def')}" />

但这不是最好的计划

虽然这些肯定会 "work",但其中包含标点符号的变量有点不寻常,并且可能会使下一位程序员在查看您的代码时感到困惑。除非我有充分的理由使用该名称,否则我不会这样做。