Spring MVC 如何使用Thymeleaf的#lists.isEmpty和Spring Data的页面接口?

5us2dqdw  于 2022-11-14  发布在  Spring
关注(0)|答案(2)|浏览(79)

我使用jpenren的Thymeleaf Spring Data 方言:https://github.com/jpenren/thymeleaf-spring-data-dialect
遵照他最后的建议:
默认情况下,SpringDataDialect在请求中搜索属性“page”,或者如果存在org.springframework.data.domain.Page类型的属性。要使用其他模型属性,请使用sd:page-object="${attrName}”
我在Spring控制器中做了如下操作:

@RequestMapping("search")
public String search(Model model, @PageableDefault Pageable pageable) {
    Page<User> users = userRepository.findAll(pageable);
    model.addAttribute("users", users);
    return "user/search";
}

在我search.html视图中,有一段摘录:

<table class="table">
      <caption class="text-xs-center" th:if="${#lists.isEmpty(users)}">No user found</caption>
      <thead>
        <tr>
          <th>Username</th>

            (...)

      <tbody>
        <tr th:each="user : ${users}">
          <td th:text="${user.name}">Username</td>

不幸的是,${#lists.isEmpty(users)}不起作用。它可以在我没有使用Page<?>的其他页面上工作。
那么我该怎么做这个测试呢?

qnzebej0

qnzebej01#

看起来Thymeleaf的#lists确实需要一个List,而Page显然不是,因为它只实现了Iterable
由于您首先要检查内容的存在(或不存在),因此可以直接使用Page.hasContent(),这意味着th:unless="{adherents.hasContent()}也可以完成这项任务。

nxowjjhe

nxowjjhe2#

如上所述,问题是#lists只需要一个List对象,而不是一个Page对象。有两种方法可以解决这个问题:
1.通过使用Page类的isEmpty()方法
1.通过将Page转换为List

isEmpty()方法

#lists.isEmpty()方法的替代方法是在thymeleaf中的Page对象上使用isEmpty()方法。
因此,您可以轻松使用:

<div th:if="${users.isEmpty()}">
  <span>There are no users</span>
</div>
<div th:unless="${users.isEmpty()}">
  <table>
    (...)
  </table>
</div>

正在转换

或者,您可以使用toList方法将Page对象转换为List,如下所示,并使用常用的#lists.isEmpty()方法检查它是否为空,因为您现在有一个转换后的列表。

<div th:with="convertedList=${#lists.toList(users)}">
    <div th:if="${#lists.isEmpty(convertedList)}">
        <span>There are no users</span>
    </div>
    <div th:unless="${#lists.isEmpty(convertedList)}">
        <table>
            (...)
        </table>
    </div>
</div>

参考:Thymeleaf列表实用程序对象|巴恩东

相关问题