#html #spring-boot
Вопрос:
Я новичок в spring boot и thymeleaf,
У меня есть список книг в таблице с флажками, я не уверен, как передать выбранные идентификаторы книг из представления в контроллер и использовать их с помощью кнопок заимствования или возврата? не могли бы вы, пожалуйста, помочь?
Вот мой Html-файл https://wtools.io/paste-code/b5g4 и это важная часть из моей реализации книжного сервиса :
public void borrowBook(String userEmail, String bookIds, Model model) {
if (!CollectionUtils.isEmpty(books)) {
User user = userRepository.findByEmail(userEmail);
List<String> requestedBooks = getRequestedBookIds(bookIds);
List<Book> borrowedBooks = new ArrayList<>();
List<Book> invalidBooks = new ArrayList<>();
for (Book book : books) {
if (requestedBooks.contains(book.getId()) amp;amp; !book.isBorrowed() amp;amp; user != null) {
book.setBorrowed(true);
book.setBorrowedBy(user.getFirstName());
borrowedBooks.add(book);
model.addAttribute("bookStatus", "Book BOrrowed By " user.getFirstName());
} else {
invalidBooks.add(book);
model.addAttribute("bookStatus", "No Books are available");
}
}
model.addAttribute("inValidBooks", invalidBooks);
model.addAttribute("bookList", borrowedBooks);
}
}
@SuppressWarnings("unchecked")
private List<String> getRequestedBookIds(String bookIds) {
List<String> requestedBookIds = null;
try {
requestedBookIds = new ObjectMapper().readValue(bookIds, ArrayList.class);
} catch (Exception e) {
e.printStackTrace();
}
return !CollectionUtils.isEmpty(requestedBookIds) ? requestedBookIds : new ArrayList<>();
}
и это от контроллера:
@GetMapping(value = "/available", produces = MediaType.APPLICATION_JSON_VALUE)
public String getAvailableFreeBooks(Model model) {
List<Book> availableBooks= bookService.getAllAvailaBooks();
model.addAttribute("listBooks", availableBooks);
return "available_books";
}
Комментарии:
Ответ №1:
В вашем html вы, вероятно,:
<input type="checkbox" th:field="*{requestedBooks}" value="${book.getId}">
- опустите идентификатор (если он вам не нужен).
- используйте
th:field
(вместоname
). - установите
value
значение идентификатора текущей книги.
В вашем контроллере: requestedBooks
( @ModelAttribute("requestedBooks") List<String> requestedBooks
) будет (должно) содержать все идентификаторы проверенных книг.
Ссылка: https://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html#checkbox-fields
Образец хранилища:
https://github.com/xerx593/soq67602860
Дата начала:
Чтобы обработать флажки на стороне клиента (jquery), вы можете получить массив идентификаторов, таких как:
<script language="javascript" type="text/javascript">
$(document).ready(function () {
$("#btnBorrow").click(function() {
var reqBookIds = new Array();
$('input[name="requestedBooks"]:checked').each(function() {
reqBookIds .push(this.value);
});
alert("Number of selected Books: " reqBookIds .length "n" "And, they are: " reqBookIds);
// do stuff with reqBookIds ...
)};
});
</script>
С упомянутым <input type="checkbox" .../>
(учтите, что <input/>
это должно быть внутри <form/>
!!) и кнопкой типа:
<button id="btnBorrow">Borrow</button>
.. userEmail
это должно исходить со стороны клиента???
Комментарии:
1. Спасибо, не могли бы вы помочь мне написать часть запрошенных книг контроллера?
2. вот , дорогая .. я сделал простой пример! 😉
3. Кнопка заимствования по-прежнему не работает