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

条件性胸腺细胞片段

卢普松
2023-03-14

我想使用一个模板片段创建一个最多包含三个项目的列表。无论是否有项目,都将始终显示项目的三个空格,因此看起来是这样的。

<div>
  <div th:if="${#lists.size(block.children) > 0}"
    th:insert="code-block :: block(${block.children[0]})" 
    th:remove="tag">
  </div>
</div>;
<div>
  <div th:if="${#lists.size(block.children) > 1}"
    th:insert="code-block :: block(${block.children[1]})" 
    th:remove="tag">
  </div>
</div>;
<div>
  <div th:if="${#lists.size(block.children) > 2}"
    th:insert="code-block :: block(${block.children[2]})" 
    th:remove="tag">
  </div>
</div>

但是,即使th:if语句的计算结果为false,且列表为空,它仍会尝试执行'th:include语句,从而导致以下错误:

Caused by: org.springframework.expression.spel.SpelEvaluationException:
EL1025E:(pos 14): The collection has '0' elements, index '0' is invalid

如何让if语句优先于片段执行?

共有1个答案

商华藏
2023-03-14

是的,不幸的是,由于include优先于if,因此您必须将if向上移动。最简单的方法是将其放入th:block,如下所示:

<div>
  <th:block th:if="${#lists.size(block.children) > 0}">
    <div th:insert="code-block :: block(${block.children[0]})" th:remove="tag" />
  </th:block>
</div>;
<div>
  <th:block th:if="${#lists.size(block.children) > 1}">
    <div th:insert="code-block :: block(${block.children[1]})" th:remove="tag" />
  </th:block>
</div>;
<div>
  <th:block th:if="${#lists.size(block.children) > 2}">
    <div th:insert="code-block :: block(${block.children[2]})" th:remove="tag" />
  </th:block>
</div>

您还可以简化代码,使其看起来更像这样:

<th:block th:each="i: ${#numbers.sequence(0, 2)}">
  <th:block th:if="${#lists.size(block.children) > i}">
    <div th:insert="code-block :: block(${block.children[i]})" th:remove="tag" />
  </th:block>

  <th:block th:unless="${i == 2}">;</th:block>
</th:block>
 类似资料:
  • 我使用thymeleaf分割我的模板在头/主/脚部分。为了在一些页面上包含样式表和javascript(但不是在其他页面上),我使用了这里解释的片段表达式。 所以我的头。html看起来像: 例如,在我的主页中使用了索引。html格式如下: 这工作正常。脚本和链接标记显示在结果页面的标题中。不过,偶尔我希望在正文的末尾有脚本(就在

  • 我想做一些像 在百里香叶中。我知道有一个价值观,我要做的就是 如何在Thyemleaf的select选项中传递两个值。

  • 我的PDF包含一个文本形式的带有连字符符号的URL。当我通过标记直接从PDF复制URL时,当连字符位于行的末尾时,符号在粘贴后消失。 我有以下html: 但复制粘贴后,我得到的url没有连字符:https://sec2mms.hansatonich.at/test.t.ozkq/ 我错过了什么?

  • 问题内容: 使用“模板修饰而不是包含”技术时,如何检查Thymeleaf片段是否已定义? 在以下 template.html 示例中,我只希望在定义片段时呈现script标签 但是在我的使用上面模板的 index.html 中,没有定义脚本片段,但是script标签仍然会渲染 我尝试过但没有运气 问题答案: 我在Thymeleaf玩了一点(…),这是我的结论。 在下文中,我将使用任何给定的标签(,

  • 我有这个密码; 其中,是存储在属性文件中的“子类型”的国际化字符串。所以我可以看出i18n设置正确。但是,我无法确定替换h6元素中的字符串子类型的语法。二者都 并给出语法错误。有人能给我指一下正确的方向吗。

  • 我正在尝试为我的站点使用th: each函数,以查找我数据库中的所有狗,并使用以下代码。在我的控制器中,我有: 在这个for循环之后,我对数组中的每个对象进行了println,并验证了我的所有dog对象都是有效的且不为null。在验证数组是否正确后,我将其作为模型传递,并尝试在html中获取它。当前的问题是,当我转到html时,它什么也不显示。我没有收到任何thymeleaf错误,只是一个空白屏幕