TL:DR падащи списъци с Thymeleaf и SpringBoot
Доста подобно на проблема по-горе, но моята стойност издателят предава избраната стойност празна и аз вече направих предложеното решение.
Имам страница с формуляр за книга (добавяне) като по-долу:
<form th:action="@{/book/save}"
th:object="${book}" method="POST">
<!-- Add hidden form field to handle update -->
<input type="hidden" th:field="*{id}" />
<input type="text" th:field="*{bookName}"
class="form-control mb-4 col-4" placeholder="First name">
<input type="text" th:field="*{bookDescription}"
class="form-control mb-4 col-4" placeholder="Last name">
<div class="form-group blu-margin">
<select class="form-control" th:field="${thepublisher}" id="dropOperator">
<option value="0">select operator</option>
<option th:each="publisher : ${thepublisher}" th:value="${publisher.id}" th:text="${publisher.publisherName}"></option>
</select>
</div>
<button type="submit" class="btn btn-info col-2">Save</button>
</form>
Опитвам се да получа стойността на текста или идентификатора на издателя, за да мога да добавя нова книга към моята база данни. Книгата е като по-долу:
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="book_name")
private String bookName;
@Column(name="book_sub_name")
private String bookSubName;
@Column(name="book_series_name")
private String bookSeriesName;
@Column(name="book_isbn")
private String bookISBN;
@Column(name="book_description")
private String bookDescription;
@OneToOne
private Writer theWriter;
@OneToOne
private Publisher thePublisher;
Моят Publisher е код като по-долу (няма да слагам writer, за да го опростя, ще го свържа и с обекта book):
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="publisher_name")
private String publisherName;
@Column(name="publisher_description")
private String publisherDescription;
Моят код на контролера за споменатата по-горе страница за добавяне.
@GetMapping("/showFormForAdd")
public String showFormForAdd(Model theModel) {
// create model attribute to bind form data
BookDto theBook = new BookDto();
List<Publisher> thePublisher = publisherService.findAll();
theModel.addAttribute("book", theBook);
theModel.addAttribute("thepublisher",thePublisher);
return "book/book-form";
}
Опитвате се да получите стойности от него, като по-долу.
@PostMapping("/save")
public String saveEmployee(@ModelAttribute("book") BookDto theBook) {
// save the employee
Book NewItem = new Book();
NewItem.setBookDescription(theBook.getBookDescription());
NewItem.setBookName(theBook.getBookName());
// use a redirect to prevent duplicate submissions
return "redirect:/book/list";
}
Основният ми проблем е, че обектът на издателя винаги е празен, когато се предава на функцията saveEmployee. Мога да запълня страницата с издатели, така че предаването на моите стойности там работи добре.