Spring Framework дочерний объект в объекте теряется после нажатия на веб-сайт - PullRequest
1 голос
/ 06 марта 2020

Я начал изучать весну несколько недель go, и пока все идет хорошо. Но есть какой-то неприятный обходной путь, который беспокоит меня уже несколько дней. Вкратце: я получаю объект (из одной таблицы базы данных библиотека ) с дочерним объектом, который является списком (из другой таблицы book ). Библиотека и список книг загружаются правильно, когда она вызывается - мой класс библиотеки выглядит следующим образом.

@Data
@Entity
public class Library implements Serializable {

…

@OneToMany(mappedBy = „library“)
@JsonManagedReference
private List<Book> books;

…

}

Я создал веб-сайт с html и тимелистом, чтобы показать все данные в форме html. Где-то внутри формы я поместил элемент управления select, как показано здесь:

<select id="selectReader" name="selectReader" th:object="${bookstore.selectedReader}" th:field="*{id}" class="form-control form-control-sm" required="true" onchange="submit()">
  <option th:value="-1">Add Reader</option>
  <option th:each="item : ${readers}" th:value="${item.id}" th:text="${item.name}"/>
</select>

Но когда я щелкаю элемент управления select, страница перезагружается и список книг исчезает.

@PostMapping("/updateBookstore/{id}")
public String updateBookstore(@PathVariable int id, @ModelAttribute Bookstore bookstore, Model model) {
  // bookstore.books is null
  // also checking the model for the attribute "bookstore.books" is null
}

Мой текущий обходной путь - сохранить мой библиотечный объект в закрытом поле RestController, тогда список книг все еще там. Но это кажется мне плохой практикой.

Как я могу настроить код так, чтобы библиотека всегда загружалась со списком книг без этого обходного пути? Пожалуйста, скажите мне, если у вас есть идея.

1 Ответ

0 голосов
/ 09 марта 2020

Я забыл создать ссылку на тимелист в HTML. Добавив его, я вижу список книг в коде.

<tr th:each="book, stat : *{books}">
  <td>Borrowed by</td>
  <td>
    <input type="text" class="form-control form-control-sm" th:field="*{books[__${stat.index}__].borrowedBy}"/>
  </td>
</tr>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...