Thymeleaf-循环-如果找到值则设置变量

时间:2018-07-18 21:10:00

标签: thymeleaf

我正在尝试为我的对象列表显示自定义图像。图像作为对象的属性之一存储在数据库中,并返回到模型中的模板。

<ul>
  <li th:each="fruit : ${MyPage.fruitList}">
    <div class="field" th:onclick="'javascript:doSubmit(\'' + ${fruit.guid} + '\');'">
      <ul>
        <li th:each="property:${fruit.fruitProperties}">
          <div th:if="${property.propertyName}=='fruit_image'">
            <img alt="fruit_image" id="fruitImage" th:src="${property.propertyValue}" style="width:100px;height:100px;"></img>
          </div>
        </li>
      </ul>
      <label th:text="${fruit.name}" class="radio-label"></label> 
    </div>
  </li>
</ul>

使用上面的代码,我能够成功地将存储为属性“ fruit_image”的图像显示在数据库中的fruit对象上。

现在我的问题是,如果水果上不存在“ fruit_image”属性,如何显示默认图像?有没有办法在'if'内设置标志或变量?

谢谢!

1 个答案:

答案 0 :(得分:1)

不,没有办法像这样改变Thymeleaf中的变量。话虽如此,您可以使用collection projection检查该属性是否存在。例如,这是我将如何处理默认图像的方法:

<ul>
    <li th:each="property:${fruit.fruitProperties}">
        <div th:if="${property.propertyName}=='fruit_image'">
            <img alt="fruit_image" id="fruitImage" th:src="${property.propertyValue}" style="width:100px;height:100px;"></img>
        </div>
    </li>

    <li th:unless="${#lists.contains(fruit.fruitProperties.![propertyName], 'fruit_image')}">
        <div>
            <img alt="fruit_image" id="fruitImage" src="DEFAULT-IMAGE.jpg" style="width:100px;height:100px;"></img>
        </div>
    </li>
</ul>

像这样遍历所有属性,而不是遍历所有属性。

<ul th:with="has_image = ${#lists.contains(fruit.fruitProperties.![propertyName], 'fruit_image')}">
    <li th:if="${has_image}">
        <img alt="fruit_image" id="fruitImage" th:src="${fruit.fruitProperties.^[propertyName == 'fruit_image'].propertyValue}" style="width:100px;height:100px;" />
    </li>

    <li th:unless="${has_image}">
        <img alt="fruit_image" id="fruitImage" src="DEFAULT-IMAGE.jpg" style="width:100px;height:100px;"></img>
    </li>
</ul>