百里香 th:each 用 th:if 过滤

Thymeleaf th:each filtered with th:if

我需要为 components 数组中的每个 component 迭代并创建 <span> 元素,其中 name'MATERIAL'

我的代码如下

<span th:each="component : ${body.components}" 
      th:object="${component}">
        <button th:if="*{name} == 'MATERIAL'" 
                th:text="*{title}"></button>
</span>

如果 name 不等于 'MATERIAL',此代码在生成一组空 <span> 元素之前一切正常。我不想创建这个空的 <span> 元素。

下面的我也试过了

<span th:each="component : ${body.components}" 
      th:object="${component}"
      th:if="*{name} == 'MATERIAL'">
         <button th:text="*{title}"></button>
</span>

这会导致输出为空并且根本不打印任何内容。有人可以帮我解决这个问题吗?

您应该直接使用点 (.) 符号引用迭代项 属性,而不是在内部通过 SpEL 表达式求值 (*{name})你的 html 元素:

<span th:each="component : ${body.components}" 
      th:object="${component}"
      th:if="${component.name} == 'MATERIAL'">
  <button th:text="*{title}"></button>
</span>