Это не особенно элегантное решение, но я думаю, что оно делает то, что вам нужно. Он перестраивает ваш подход, поэтому может потребоваться его перевод в ваш конкретный c контекст.
Это немного хрупко, потому что вам нужно вести подсчет разделов (объяснено ниже).
layout.html
:
<html xmlns:th="http://www.thymeleaf.org"
th:fragment="layout">
<section class="row-outer-sm"
th:each="i,iterStat : ${#numbers.sequence(1, 3)}"
th:with="section=${'section-' + i}">
<div class="container">
<div class="row justify-content-center">
<div class="col">
<div th:if="${iterStat.first}">
Messages go here
</div>
<div th:replace="~{/content.html :: __${section}__} ">
Content goes here.
</div>
</div>
</div>
</div>
</section>
</html>
content.html
:
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<div th:fragment="section-1">
<div class="section-content">
Some things for my first section
</div>
</div>
<div th:fragment="section-2">
<div class="section-content">
Some things for my second section
</div>
</div>
<div th:fragment="section-3">
<div class="section-content">
Some things for my third section
</div>
</div>
</html>
Шаблон макета создает динамически созданный селектор фрагмента section_n
, где n
- итерированный значение, основанное на генераторе последовательностей Thymeleaf:
${#numbers.sequence(1, n)}
Это хрупкая часть - вы должны помнить, чтобы жестко закодированное значение n соответствовало количеству (и именам!) фрагментов раздела в шаблоне содержимого.
Мы также используем предварительную директиву Thymeleaf __${}__
, чтобы позволить th:replace
работать со строкой - селектором шаблона.
В моем примере конечный результат HTML вот так (формат немного шаткий):
<section class="row-outer-sm">
<div class="container">
<div class="row justify-content-center">
<div class="col">
<div>
Messages go here
</div>
<div>
<div class="section-content">
Some things for my first section
</div>
</div>
</div>
</div>
</div>
</section>
<section class="row-outer-sm">
<div class="container">
<div class="row justify-content-center">
<div class="col">
<div>
<div class="section-content">
Some things for my second section
</div>
</div>
</div>
</div>
</div>
</section>
<section class="row-outer-sm">
<div class="container">
<div class="row justify-content-center">
<div class="col">
<div>
<div class="section-content">
Some things for my third section
</div>
</div>
</div>
</div>
</div>
</section>
Надежда, которая помогает или, по крайней мере, дает вам вдохновение.