Форма для публикации в ч:каждый раздел [Пружинная загрузка лист Thymeleaf]

#spring-boot #thymeleaf

#пружинный ботинок #тимелиаф

Вопрос:

Я отображаю список объектов, и для каждого из них я хочу отобразить кнопку для доступа к определенной странице профиля выбранного объекта. Я попытался использовать скрытый ввод и передать ему идентификатор выбранного объекта, но в контроллере идентификатор равен нулю.

Это код на html-странице.

 lt;table class="table table-secondary table-bordered"gt;  lt;theadgt;  lt;trgt;  lt;th scope="col"gt;#lt;/thgt;  lt;th scope="col"gt;Nome Laboratoriolt;/thgt;  lt;th scope="col"gt;Indirizzo Laboratoriolt;/thgt;  lt;th scope="col"gt;Distanza dal Laboratoriolt;/thgt;  lt;th scope="col"gt;Dettaglilt;/thgt;  lt;/trgt;  lt;/theadgt;   lt;tbodygt;  lt;tr th:each="element,iterationStatus : ${lista}"gt;  lt;td th:text="${iterationStatus.count}" style="width: 10px"gt;lt;/tdgt;  lt;td th:text="${element.laboratorio.nome}"gt;lt;/tdgt;  lt;td th:text="${element.laboratorio.indirizzo}"gt;lt;/tdgt;  lt;td th:text="${#numbers.formatDecimal(element.distanza,1,2,'POINT')}  ' km'"gt;lt;/tdgt;  lt;tdgt;  lt;form th:action="@{/cittadino/selected}" th:object="${laboratorio}" th:method="post"gt;  lt;input class="form-control" type="hidden"  th:attr="value=${element.laboratorio.id}" th:field="*{id}"/gt;  lt;button type="submit"gt;Visualizzalt;/buttongt;  lt;/formgt;  lt;/tdgt;  lt;/trgt;  lt;/tbodygt;  lt;/tablegt;  

Это последующее сопоставление в контроллере.

 @PostMapping("selected")  public String laboratorioSelezionato(@ModelAttribute("laboratorio") Laboratorio laboratorio,  Model model) {  // System.out.println(laboratorio.getId());  Laboratorio lab1 = laboratorioRepository.getById(laboratorio.getId());  model.addAttribute("laboratorio",lab1);  return "laboratorio/indexForUtente";  }  

Идентификатор поля в контроллере равен нулю. Что я могу попробовать?

Ответ №1:

Будет проще использовать сопоставление GET с переменной path.

Измените свой HTML на этот:

 ... lt;tdgt;  lt;a th:href="@{/cittadino/{id}(id=${laboratorio.id})}" th:text="#{select.item}"gt;lt;/agt; lt;/td  

И в вашем контроллере:

 @GetMapping("/{id}") public String laboratorioSelezionato(@PathVariable("id") String id, Model model) { Laboratorio lab1 = laboratorioRepository.getById(id);  model.addAttribute("laboratorio",lab1);  return "laboratorio/indexForUtente"; }  

Я использовал String здесь в качестве типа для идентификатора, но если вы используете long или UUID , измените тип по мере необходимости.

Комментарии:

1. Это действительно интересное решение. Это решило мою проблему. Спасибо!