Загрузочные панели внутри цикла Thymeleaf - тот же идентификатор и ссылка
Я пытаюсь сгенерировать загрузочные панели в цикле Thymeleaf, вот так:
<table>
<tr th:each="p, iterStat : ${completedList}">
<td style="padding: 0 15px 0 15px;">
<div class="panel panel-success">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion"
href="#collapseOne" th:text="${p.key}">p.k</a>
<span style="float: right;" class="glyphicon glyphicon-ok"></span>
</h4>
</div>
<div th:id="collapseOne" class="panel-collapse collapse in">
<div class="panel-body">
<span th:text="${p.value}"></span>
</div>
</div>
</div>
</td>
</tr>
</table>
Но у меня так же id
а также href
для каждого элемента цикла, поэтому панели не работают.
Могу ли я сделать что-то для динамического изменения id
а также href
?
2 ответа
Решение
Вы можете использовать переменную состояния (iterStat
) создать уникальный идентификатор для каждой строки:
<a data-toggle="collapse" data-parent="#accordion" th:href="'#collapse' + ${iterStat.index}" th:text="${p.key}">
а также
<div th:id="'collapse' + ${iterStat.index}" class="panel-collapse collapse in">
Я только что столкнулся с этой же проблемой, и то, что я сделал, было
<div class="accordion" id="accordionExample"
th:each="todo : ${todos}">
<div class="accordion-item">
<h2 class="accordion-header" th:id="heading + ${todo.id}">
<button class="accordion-button" type="button"
data-bs-toggle="collapse"
th:attr="data-bs-target=|#col${todo.id}" aria-expanded="true"
aria-controls="collapseOne">Accordion Item #1</button>
</h2>
<div th:id="col + ${todo.id}"
class="accordion-collapse collapse show"
th:attr="aria-labelledby=|heading${todo.id}|"
data-bs-parent="#accordionExample">
<div class="accordion-body">
<strong>This is the first item's accordion body.</strong> It
is shown by default, until the collapse plugin adds the
appropriate classes that we use to style each element. These
classes control the overall appearance, as well as the showing
and hiding via CSS transitions. You can modify any of this
with custom CSS or overriding our default variables. It's also
worth noting that just about any HTML can go within the
<code>.accordion-body</code>
, though the transition does limit overflow.
</div>
</div>
</div>
</div>
вместо того, чтобы объединять идентификатор, просто добавьте его в виде строки с
th:attr
, то значение должно быть помещено внутри
| {dynamic value e.g id, uuid, primary key} |
. затем соедините с
+
для
th:id
который автоматически узнает свой эквивалентный атрибут, установленный ранее.