#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. Это действительно интересное решение. Это решило мою проблему. Спасибо!