我使用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<?>
的其他页面上工作。
那么我该怎么做这个测试呢?
2条答案
按热度按时间qnzebej01#
看起来Thymeleaf的
#lists
确实需要一个List
,而Page
显然不是,因为它只实现了Iterable
。由于您首先要检查内容的存在(或不存在),因此可以直接使用
Page.hasContent()
,这意味着th:unless="{adherents.hasContent()}
也可以完成这项任务。nxowjjhe2#
如上所述,问题是
#lists
只需要一个List
对象,而不是一个Page
对象。有两种方法可以解决这个问题:1.通过使用
Page
类的isEmpty()
方法1.通过将
Page
转换为List
isEmpty()方法
#lists.isEmpty()
方法的替代方法是在thymeleaf中的Page
对象上使用isEmpty()
方法。因此,您可以轻松使用:
正在转换
或者,您可以使用
toList
方法将Page
对象转换为List
,如下所示,并使用常用的#lists.isEmpty()
方法检查它是否为空,因为您现在有一个转换后的列表。参考:Thymeleaf列表实用程序对象|巴恩东