【问题标题】:th:each loop doesnt workth:每个循环都不起作用
【发布时间】:2018-03-17 19:06:07
【问题描述】:

我对 th:each 有疑问。它不循环。我尝试修复它很长时间,并且我搜索了许多具有相同问题的主题,但它仍然无法正常工作。所以我在这里询问如何修复它的信息。

网页上的列表(第一和第二)没有任何显示,所以我认为这是错误的

<ul th:each="author : ${book.authors}">

图书类:

@ManyToMany(mappedBy = "books")
     private Set<Author> authors = new HashSet<>();

作者类别:

@ManyToMany
    @JoinTable(name = "author_books",
            joinColumns = @JoinColumn(name = "book_id"),
            inverseJoinColumns = @JoinColumn(name= "author_id"))
    private Set<Book> books = new HashSet<>();

HTML 代码:

<td>
    <ul th:each="author : ${book.authors}">
        <li>First</li>
        <li>Second</li>
        <li  th:text="${book.getAuthorsN()}">Author</li>
    </ul>
</td>`

=======更新=======

控制器:

@Controller
public class BooksController {

private final BookService bookService;

public BooksController(BookService bookService) {
    this.bookService = bookService;
}

@RequestMapping("/books/home")
public String showBooks(Model model){

    model.addAttribute("books", bookService.getBooks());

    return "books/home";
}

}

【问题讨论】:

  • 你的调试告诉你什么?数据是否正确地从数据库中检索?查看了 JPA 提供者的日志?
  • 好的,调试告诉我 mappedBy 引用了一个未知的目标实体属性,所以我将 @ManyToMany(mappedBy = "authors") 更改为 @ManyToMany(mappedBy = "books") 但现在仍然无法工作和调试不显示任何错误
  • 添加你的控制器
  • 好的,控制器已添加

标签: html spring jpa thymeleaf


【解决方案1】:

要显示book 的属性(如getAuthorsN()),您应该遍历books 列表,而不是authors,例如:

<ul th:each="book : ${author.books}">
    <li>First</li>
    <li>Second</li>
    <li th:text="${book.getAuthorsN()}">Author</li>
</ul>

也可能在您的 Author 类中,您应该更改对象的主键 (joinColumns),并将外键更改为目标对象的主键 (inverseJoinColumns) 以保持 Author 和 Book 之间的关系:

@JoinTable(name = "author_books",
        joinColumns = @JoinColumn(name = "author_id"),
        inverseJoinColumns = @JoinColumn(name= "book_id"))

阅读更多关于ManyToMany relationship的信息。

【讨论】:

    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    相关资源
    最近更新 更多