#spring #spring-boot #spring-mvc #thymeleaf
#spring #spring-загрузка #spring-mvc #thymeleaf
Вопрос:
У меня проблема, с которой я хотел бы получить помощь!
Я использую Intellij Idea и использую Spring MVC с Thymeleaf. Я создал фрагмент, и все в порядке, он работает хорошо и импортируется в мой текущий HTML-файл.
<div th:replace="fragments/ModalCart :: modal(${products.get(0)})"></div>
Это мой статус импорта, и, как вы можете видеть, я передаю один объект типа Product
.
Это мой фрагмент HTML-файла
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
</head>
<body>
<div th:fragment="modal(product)">
<button id="myBtn">Open Modal</button>
<div id="myModal" class="modal">
<div class="modal-content">
<section class="card">
<div class="columns">
<div class="column">
<p th:text="${product.getImgUrl()}"></p>
</div>
</div>
</section>
</div>
</div>
</div>
</body>
</html>
Моя проблема в том, что мой «продукт» в модальном фрагменте имеет тип, а Object
не тип, Product
каким я хотел бы быть (из-за этого, если я вызываю imgUrl
метод получения для переданного в продукте, я получаю красное подчеркивание, которое говорит мне, что он не может быть разрешен, даже если он работает, у меня естьошибка в моем HTML-файле, которая раздражает).
Как мне убедиться, что параметр, который передается в этот класс, имеет тип Product
class, а не java.lang.Object
class ?
Есть ли какой-нибудь способ вернуть его обратно в a Product
или я застрял?
Спасибо
Комментарии:
1. Переменные предоставляются шаблону, с
org.springframework.ui.Model
которымString
нужноObject
хранить. Я думаю, как только вы добавите свою переменную в модель, ее тип станет неактуальным.
Ответ №1:
Thymeleaf на самом деле не заботится о типе переменной, передаваемой фрагменту, поэтому ${product.getImgUrl()}
(эквивалентно ${product.imgUrl}
) должно работать независимо от того, имеет ли он красные подчеркивания.
Что касается устранения этих проблем … это зависит от среды IDE. Например, в Intellij я думаю, что что-то вроде этого должно работать:
<div th:fragment="modal(product)">
<!--/*@thymesVar id="product" type="your.package.Product"*/-->
Где вы your.package.Product
заменяете свой фактический пакет.
Комментарии:
1. Отличный ответ! В моей Intellij IDEA 2021.2 строка комментария должна быть помещена поверх
th:fragment
строки. И шаблон /* */ comment в комментарии xml не так уж и нужен.2. @RickoD Я думаю
/* ... */
, что часть делает это комментарием thymeleaf, который не выводится в HTML (в противном случае вы рискуете раскрыть имена объектов — если это имеет значение).3. Спасибо за исправление, я поместил фрагмент в отдельный файл, который не отображается как страница, и разместил комментарий снаружи (выше) элемента fragment, поэтому я не заметил его, когда ссылался на него