如何仅在Thymeleaf片段存在时插入,不存在则忽略?
解决Thymeleaf注入可选片段时的TemplateProcessingException异常
问题核心在于:Thymeleaf模板解析时会优先处理所有表达式,哪怕条件判断为假,也会尝试解析片段路径。你之前的写法里,当js_assets为null时,片段路径会变成无效的fragments/null :: null,直接触发异常。
下面是两种可行的解决方法:
方法1:先检查模板存在性再渲染
用th:if结合Thymeleaf的#templates.exists()工具方法,只有片段确实存在时才渲染插入标签:
<script th:if="${js_assets != null and #templates.exists('fragments/' + js_assets)}" th:insert="~{'fragments/' + js_assets :: ${js_assets}}" th:inline="javascript">...</script>
方法2:带存在性检查的条件表达式
在条件表达式里同时判断变量不为空且模板存在,否则插入空片段~{}:
<script th:insert="${js_assets != null and #templates.exists('fragments/' + js_assets)} ? ~{'fragments/' + js_assets :: ${js_assets}} : ~{}" th:inline="javascript">...</script>
注意事项
- 确认
fragments/路径与你的模板实际存放位置匹配(比如片段文件在src/main/resources/templates/fragments/下,路径就是正确的) - 确保
js_assets的值与片段定义的th:fragment名称完全一致
内容的提问来源于stack exchange,提问作者lawi75
相关产品推荐
相关产品推荐

