【问题标题】:Thymleaf: Print Number of Table Entries for Current MonthThymeleaf:打印当前月份的表条目数
【发布时间】:2020-07-03 07:38:19
【问题描述】:

我希望使用 Thymeleaf 打印当前月份表中的行数。

我当前的代码打印出以下显示:

理想情况下,我正在寻找它来显示这个:

我的代码可以在下面找到:

<div th:each="project:${projectList}">
    <div th:if="${#dates.format(project.enddate, 'MM')} == ${#calendars.format(#calendars.createNow(), 'MM')}">
        <div class="h5 mb-0 font-weight-bold text-gray-800" th:text="${#lists.size(project)}"></div>
    </div> 
</div>

【问题讨论】:

    标签: html spring postgresql spring-boot thymeleaf


    【解决方案1】:

    在你的控制器中计算总数并在模型中添加一个额外的属性来显示可能更容易。

    @GetMapping
    public String myControllerMethod(Model model) {
      ...
      model.addAttribute("totalCurrentMoth", calculateTotalOfCurrentMonth());
    
      return "overview"; // change to what your view is actually called
    }
    

    并将您的 HTML 代码替换为:

    <div th:text="${totalCurrentMonth}"></div>
    

    【讨论】:

      【解决方案2】:

      您绝对可以通过集合 selectionprojection 以及 Thymeleaf 实用程序对象来完成此操作。我猜这样的事情会奏效吗? (在您的示例中,您似乎将 project 视为列表和对象,所以我在这里猜测了一下。)

      <span
        th:with="currentMonth=${#calendars.format(#calendars.createNow(), 'MM')}"
        th:text="${#lists.size(projectList.?[#dates.format(enddate, 'MM') == #root.currentMonth])}" />
      

      如果 projectList 真的是一个列表列表,这样的事情可能会起作用:

      <span th:text="${#aggregates.sum(projectList.![size()])}" />
      

      【讨论】:

        【解决方案3】:

        在@Wim Deblauwe 的建议下终于解决了这个问题。

        我在我的存储库文件中创建了一个查询,它返回了月份与当前月份匹配的所有项目的列表,如下所示:

        @Query("SELECT p, a FROM Project p JOIN p.user a WHERE a.username = :username AND MONTH(p.enddate) = MONTH(CURRENT_DATE)")
            List<Project> findAllProjectsByCurrentUsernameAndEnddate(@Param("username") String username);
        

        然后我在我的服务文件中找到了此列表中的条目数:

        public int getNumberofProjectsByYear(String username) {
                return projectRepository.findAllProjectsByCurrentUsernameAndEnddate(username).size();
            }
        

        从那里我可以将它添加到我的控制器中的模型中:

        @GetMapping({ "/", "/index", "/dashboard" })
        public String dashboard(Model model, Principal principal) {
           int noOfProjectsCurrentMonth = 
           projectService.getNumberofProjectsByYear(principal.getName());
        
           model.addAttribute("noOfProjectsCurrentMonth", noOfProjectsCurrentMonth);
        
        return "index";
            }
        

        并在我的 html 模板中按如下方式调用它:

        <div class="h5 mb-0 font-weight-bold text-gray-800" th:text="${noOfProjectsCurrentMonth}"></div>
        

        【讨论】:

        • 也许您可以通过SELECT COUNT(p) FROM Project p... 来避免仅返回完整对象以获取列表的大小?
        猜你喜欢
        • 1970-01-01
        • 2016-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-09
        • 1970-01-01
        • 2016-10-05
        • 1970-01-01
        相关资源
        最近更新 更多