我通常是编码的新手,并且一直在学习Java。我们已经开始学习Spring Boot和Thymeleaf,我们必须在一个应用程序上使用关键字搜索作业。我创建了一个处理程序,可以搜索作业并将其添加到HashMap
的ArrayList
中,并具有显示这些结果的模板。但是,我的问题是我们应该每次在页面顶部显示结果数,而我不知道该怎么做。
我尝试使用.size
,#lists
,#maps
,th:size
,我能想到的一切。什么都没有用。我尝试将其放在桌子上,在桌子上,循环之间,所有内容。我获得的最接近的只是在页面顶部打印"结果"一词。我一直在阅读百里叶教程,看着Baeldung,谷歌搜索了几天。我非常感谢任何帮助!
@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>
我包含了我的处理程序方法,以及与我合作的模板中的代码。对所有评论很抱歉 - 我正在尝试跟踪我尝试的内容。
编辑:现在,这是我的模板代码,它只有在我进行搜索(我想要的(之后才打印单词"结果(S("。我现在的问题是我仍然无法打印结果。
<span th:if="${results} and ${results.size()}">
<h3>Result(s)</h3>
</span>
<table class="job-listing" th:each="job : ${results}">
<tr th:each="row : ${job}">
<td th:text="${row.key}"></td>
<td th:text="${row.value}"></td>
</tr>
</table>
使用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>
您的查询在这里很可疑:
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项目,如果您的项目允许额外的依赖性,则可以使您的生活更加轻松。特别是查看@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>
。我怀疑你想要的。
打印列表的大小可以在此处找到。
我也将拥有的主要提示是编写您的代码供下一个程序员阅读。使用逻辑变量名称并保持简单。这是一条漫长的路 - 挂在那里。