Cześć, początkujący Java dev wita społeczność. Jest to mój pierwszy post, chociaż forum wcześniej odwiedzałem. Buduję prostą appkę, która ma mi na stronie www wyświetlić listę książek wraz z autorami, a na drugiej podstronie ma być możliwość dodawania tych książek do bazy mysql. Mam 2 encje - Book i Author których pola chcę połączyć z formularzem na stronie www. Mimo wielu prób nie potrafię wywołać w formularzu thymeleaf pól Book.authors.forename i Book.authors.surname.
Book.java
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String isbn;
@ManyToMany(cascade = CascadeType.ALL) // to save author's data when adding book to db
@JsonIgnoreProperties("books")
@JoinTable(name = "author_book", joinColumns = @JoinColumn(name = "book_id"),
inverseJoinColumns = @JoinColumn(name = "author_id"))
private Set<Author> authors = new HashSet<>();
Author.java
@Entity
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String forename;
private String surname;
@ManyToMany(mappedBy = "authors", cascade = CascadeType.ALL)
@JsonIgnoreProperties("authors")
private Set<Book> books = new HashSet<>();
BookController.java
(...)
@GetMapping("/book/add")
public ModelAndView addGet() {
ModelAndView m = new ModelAndView();
m.addObject("book", new Book());
m.setViewName("addBook");
return m;
}
@PostMapping("/book/add")
public ModelAndView addBook(Book book, BindingResult br) {
ModelAndView m = new ModelAndView("redirect:/index");
bookService.addBook(book);
m.addObject("book", new Book());
return m;
}
addBook.html
<form th:action="@{/book/add}" th:object="${book}" th:method="post">
<label for="author_name"> Author_Name </label>
<input th:field="*{author}" id="author_name" type="text">
<label for="author_surname"> Author_Surn </label>
<input th:field="*{author}" id="author_surname" type="text">
<label for="title"> Title </label>
<input th:field="*{title}" id="title" type="text">
<label for="isbn"> ISBN </label>
<input th:field="*{isbn}" id="isbn" type="text">
<button type="submit"> Add</button>
</form>
Kiedy próbuję robić th:each dla Author_Name i Author_Surn to nie wyświetla mi wtedy wcale tych dwóch pól formularza na stronie www. Szukałem odpowiedzi po sieci i znalazłem między innymi nested loops ale nie potrafię tego wpisać w kod addBook.html aby to działało. Co bym nie robił w tym pliku addBook.html to albo nie widzi tych Book.authors.forename i Book.authors.surname albo jak je widzi to ich nie wyświetla na stronie po uruchomieniu aplikacji. Zaczynam podejrzewać, że to może być coś z kontrolerem ale już mam taki mętlik w głowie, że szukam po prostu na siłę. Dzięki za wszelką pomoc i pozdrawiam.