Получаване на стойност от обект thymeleaf


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. Мога да запълня страницата с издатели, така че предаването на моите стойности там работи добре.


person cdincer    schedule 20.09.2020    source източник