在过去的几周中,我同时使用html5和文本模式创建了许多Thymeleaf模板。在这些模板中,我需要使用许多th:each
变量进行迭代的Context
语句。
在这些变量上,我经常访问它们的getter,这些getter随后返回其他必须使用getter的对象,依此类推。
为了处理返回的数据,我需要应用strings.defaultString(...)
所有这些组合语句使阅读和理解正在发生的事情变得困难。我的模板的许多行很长,以至于如果不水平滚动就无法读取它们。
我搜索了最佳实践,但只发现了一些描述如何创建"base templates"的方法,这些方法给出了将Thymeleaf与Spring结合使用的一般建议,或者提到了如何包含common fragements。
有没有最佳实践,如何格式化/包装Thymeleaf语句而不会对创建的html或文本造成负面影响(例如,不需要的换行符)?
答案 0 :(得分:1)
您可以使用th:with
创建变量,这样就不必频繁执行objA.propB.propC
。因此,您分配了th:with="propB=${objA.propB}"
然后使用另一种好的方法来创建带有参数的可重用片段,以便将正在重复的任何HTML提取到片段中,并将该片段所需的数据作为参数传递。
更新:
<div class="profile-user-info">
<th:block th:insert='~{::profileInfoRow("Name", ${user.name}) }' />
<th:block th:insert='~{::profileInfoRow("Age", ${user.age}) }' />
<th:block th:insert='~{::profileInfoRow("Location", ${user.location}) }' />
</div>
<div th:fragment="profileInfoRow(label, value)">
<div class="profile-info-row">
<div class="profile-info-name">[[${label}]]</div>
<div class="profile-info-value">[[${value}]]</div>
</div>
</div>
因此,以上是一种简单的方法,您可以创建HTML的可重用部分,然后使用thymeleaf指令通过传递动态参数的值来包含可重用部分。