Как передать выбранные значения идентификаторов флажков из представления в контроллер

#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. pasteboard.co/K2BRDNC.png

Ответ №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. Кнопка заимствования по-прежнему не работает