【问题标题】:How to loop in thymeleaf using 2 different tables?如何使用 2 个不同的表在百里香中循环?
【发布时间】:2022-10-08 16:05:14
【问题描述】:

我找了很多答案,但找不到任何答案

我有 2 个学生和会议表,由学生 ID 连接

我想使用 thymeleaf 在表上显示不同的列,以显示学生表中的名字和姓氏,以及会议表中的日期和阅读级别等其他字段

学生班

package com.myprojects.takenotewebapp.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "students")
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @Column(name = "first_name")
    private String firstName;
    @Column(name = "last_name")
    private String lastName;
    @OneToMany(mappedBy = "student", cascade = CascadeType.ALL)
    private List<Meeting> meetings = new ArrayList<Meeting>();

    public Student(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

会议班

package com.myprojects.takenotewebapp.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.time.LocalDate;
import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@IdClass(MeetingId.class)
@Table(name = "meetings")
public class Meeting {
    @Id
    private LocalDate date;
    @Id
    private String subject;
    @Id
    private String type;
//    @EmbeddedId
    private MeetingId meetingId;
    private Character subjectLevel;
    private String strength;
    private String teachingPoint;
    private String nextStep;
    @ManyToOne(cascade = CascadeType.ALL)
    private Student student;
}

控制器方法

    public String viewAllStudentsPage(Model model, Student student) {
        model.addAttribute("listStudents", studentService.getAllStudents());
        model.addAttribute("listMeetings", meetingService.getAllMeetings());
        return "students";
    }

这是目前错误的 thymeleaf 代码,并且为同一个表中的会议字段循环了两次

 <th:block th:each="student : ${listStudents}">
                <tr th:each="student : ${listStudents}">
                    <td th:text="${student.firstName}"></td>
                    <td th:text="${student.lastName}"></td>
                    <th:block th:each="meeting : ${listMeetings}">
                        <td th:text="${meeting.subjectLevel}"></td>
                        <td th:text="${meeting.type}"></td>
                    </th:block>
                    <td>
                        <a th:href="@{/showUpdateForm/{id}(id=${student.id})}" class="btn btn-primary">Update</a>
                        <a th:href="@{/deleteStudent/{id}(id=${student.id})}" class="btn btn-danger">Delete</a>
                    </td>
                </tr>
            </th:block>

【问题讨论】:

    标签: java spring jpa thymeleaf


    【解决方案1】:
    1. 在每个类中创建 setter 和 getter:

              <table>
                  <tr th:each="post : ${postList}">
                      <td th:if="${post.isPublished()}">
                          <h1 th:text="${post.getTitle()}"></h1>
                          <p th:text="${post.getExcerpt()}"></p>
                          <p th:text=" 'Author : ' + ${post.getAuthor()}"></p>
                          <p th:text="'Published At : ' + ${post.getPublishedAt()}"></p>
                          <div class="tags">
                              <p>Tags :</p>
                              <p id="tags" th:each="tag :${post.getTags()}"
                                  th:text="${tag.getName()}"></p>
                              <br>
                          </div> <a th:href="@{/posts/{id}(id=${post.getId()})}">read more</a>
                      </td>
                  </tr>
              </table>

      这是 thymeleaf 中嵌套循环的示例,它将帮助您标记是 post 类中的列表。

    【讨论】:

      猜你喜欢
      • 2014-01-05
      • 2017-12-04
      • 2020-12-30
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      • 2021-01-09
      • 2016-05-10
      • 2014-08-28
      相关资源
      最近更新 更多