对于一般的编码我还是很陌生的,并且一直在学习Java。我们已经开始学习Spring Boot和Thymeleaf,我们必须在一个应用程序上工作,在该应用程序中使用关键字搜索工作。我创建了一个处理程序,能够搜索作业并将其添加到ArrayList
的{{1}}中,并具有显示这些结果的模板。但是,我的问题是我们应该每次在页面顶部显示结果数,而我不知道该怎么做。
我尝试使用HashMap
,.size
,#lists
,#maps
,这些都是我能想到的。什么都没用。我尝试将其放在表格上方,表格中,循环之间,所有内容之间。我最近得到的只是在页面顶部打印“结果”一词。我一直在阅读Thymeleaf教程,看着Baeldung,谷歌搜索了好几天。
非常感谢您的协助!
th:size
还有Thymeleaf:
@RequestMapping(value = "results")
public String search(
Model model,
@RequestParam String searchType,
@RequestParam String searchTerm
) {
ArrayList<HashMap<String, String>> results =
JobData.findByColumnAndValue(searchType, searchTerm);
model.addAttribute("columns", ListController.columnChoices);
model.addAttribute("results", results);
return "search";
}
我已经包含了我的处理程序方法以及正在使用的模板中的代码。抱歉,所有评论-我正在努力跟踪自己的尝试。
编辑:现在这是我的模板代码,仅在进行搜索(所需)后才显示“结果”字样。现在的问题是我仍然无法打印结果数量。
<hr />
<!--<span th:text="${results.size}">Result</span> -->
<!--<span th:text="${#lists.size(job.results)}">Result(s)</span> -->
<!-- <td th:text="${#lists.size(job.results)}">Result(s)</td> -->
<!-- TODO #2 - Loop over jobs map to display all job fields -->
<!--<div th:fragment="div"> -->
<table class="job-listing" th:each="job : ${results}">
<tr th:each="row : ${job}">
<!--<td th:text="${results.size}"></td>-->
<td th:text="${row.key}"></td>
<td th:text="${row.value}"></td>
</tr>
</table>
</div>
<!-- </table>-->
<!--</div> -->
</body>
</html>
答案 0 :(得分:1)
使用list.size()
或map.size()
来获取模板中的尺寸:
例如:
<td th:text="${results.size()}"></td>
<td th:text="${job.size()}"></td>
要检查th:if
中的大小,请使用以下命令:
<div th:if="${results.size() > 0}">
...
</div>
或者这个:
<div th:if="${!results.isEmpty()}">
...
</div>
答案 1 :(得分:0)
您在这里的查询非常可疑:
ArrayList<HashMap<String, String>> results =
JobData.findByColumnAndValue(searchType, searchTerm);
首先,您正在静态调用服务。这可能不是您想要的。阅读静态方法。
第二,您的查询返回地图列表。对于简单的查询而言,这可能太复杂了。我强烈建议为模型提供一个简单的List
。您可能希望在页面上打印results.size.size
以获取所需的内容,但是我不建议您使用这种方法。
一种更清晰的方法是执行以下操作:
List<JobListing> jobListings =
jobDataService.findByColumnAndValue(searchType, searchTerm);
model.addAttribute("jobListings", jobListings);
您的新JobListing
bean将具有工作清单的属性。如果您的项目允许其他依赖项,请看一下Lombok项目,使使用bean的生活更加轻松。尤其要注意@Data
和@Builder
。
看看jobDataService
的构造函数注入。注入服务可以使代码随着应用程序的增长而变得更具适应性。
那么您将简单地拥有:
Results Found: <span th:text="${#lists.size(jobListings)}" remove="tag">[0]</span>
<table class="job-listing">
<tr th:each="jobListing : ${jobListings}">
<td th:text="${jobListing.id}">[Id]</td>
<td th:text="${jobListing.createdOn}">[Creation Date]</td>
<!-- or whatever your requirements dictate -->
</tr>
</table>
请注意,您还将在原始HTML的每次迭代中创建一个新的<table>
。我对此表示怀疑。
可以打印列表的大小here。
我还要指出的主要技巧是编写您的代码,以供下一个程序员阅读。使用逻辑变量名并使事情简单。这条路很长-挂在那里。