我如何使用百里叶模板在哈希图的阵列列表中打印元素数量



我通常是编码的新手,并且一直在学习Java。我们已经开始学习Spring Boot和Thymeleaf,我们必须在一个应用程序上使用关键字搜索作业。我创建了一个处理程序,可以搜索作业并将其添加到HashMapArrayList中,并具有显示这些结果的模板。但是,我的问题是我们应该每次在页面顶部显示结果数,而我不知道该怎么做。

我尝试使用.size#lists#mapsth: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>。我怀疑你想要的。

打印列表的大小可以在此处找到。

我也将拥有的主要提示是编写您的代码供下一个程序员阅读。使用逻辑变量名称并保持简单。这是一条漫长的路 - 挂在那里。

最新更新