将Thymeleaf方言表达式的返回值分配给th:with中的Thymeleaf变量

时间:2019-05-15 11:31:22

标签: java spring-boot spring-mvc thymeleaf

我非常想在th:with属性中为Thymeleaf变量分配Thymeleaf方言表达式返回值。

我想实现以下目标:

<th:block th:with="foo=${#lists.contains(modelList, modelVariable)}" />

注意:我完全确定我的#lists.contains表达式可以正常工作,因为我已经在h1标签中打印了返回值,并以文本形式返回了true

<h1 th:text="${#lists.contains(modelList, modelVariable)}"></h1>

到目前为止,我已经尝试了以下语法,所有这些语法都以某种方式给了我一个解析错误...

没有外部${}

<th:block th:with="foo=#lists.contains(modelList, modelVariable)" />

具有预处理:

<th:block th:with="foo=${__#lists.contains(modelList, modelVariable)__}" />

经过预处理并将其包装在${}中:

<th:block th:with="foo=${__${#lists.contains(modelList, modelVariable)}__}" />

这些表达式为何起作用?

我是在做错什么,还是Thymeleaf th:with表达式的错误/不可能?

谢谢。

1 个答案:

答案 0 :(得分:1)

th:with表达式本身没有错。但是,使用th:with创建的变量仅适用于子标记。您的th:block立即关闭,因此foo立即超出范围,没有人可以访问它。例如,这将起作用:

<th:block th:with="foo=${#lists.contains(modelList, modelVariable)}">
    <div th:text="${foo}" />
</th:block>

但这不是:

<th:block th:with="foo=${#lists.contains(modelList, modelVariable)}" />
<div th:text="${foo}" />        

没有办法定义这样的全局变量(除了我猜想放在<html />标记之外)。