我有一个Spring Boot(2M6)应用程序,它使用Thymeleaf来呈现一些HTML文档。
我的模板包含一些最终根据用户输入选择的片段。在某些情况下,用户输入会导致选择不存在的片段。
这是一个错误,目前这会导致异常并且模板不会呈现。我想要渲染一个不同的默认“无效选择”片段,或者甚至是一个空片段。
堆栈跟踪的顶端看起来像这样
org.thymeleaf.exceptions.TemplateInputException: Error resolving fragment: ":: ${entity.fields[code]}": template or fragment could not be resolved (template: "common/fragments" - line 5, col 14)
at org.thymeleaf.standard.processor.AbstractStandardFragmentInsertionTagProcessor.doProcess(AbstractStandardFragmentInsertionTagProcessor.java:117) ~[thymeleaf-3.0.8.RELEASE.jar:3.0.8.RELEASE]
at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) ~[thymeleaf-3.0.8.RELEASE.jar:3.0.8.RELEASE]
at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95) ~[thymeleaf-3.0.8.RELEASE.jar:3.0.8.RELEASE]
at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) ~[thymeleaf-3.0.8.RELEASE.jar:3.0.8.RELEASE]
at org.thymeleaf.engine.ProcessorTemplateHandler.handleStandaloneElement(ProcessorTemplateHandler.java:918) ~[thymeleaf-3.0.8.RELEASE.jar:3.0.8.RELEASE]
at org.thymeleaf.engine.StandaloneElementTag.beHandled(StandaloneElementTag.java:228) ~[thymeleaf-3.0.8.RELEASE.jar:3.0.8.RELEASE]
at org.thymeleaf.engine.Model.process(Model.java:282) ~[thymeleaf-3.0.8.RELEASE.jar:3.0.8.RELEASE]
如果entity.fields[code]
包含匹配th:fragment
的值,则表示一切正常。
从AbstractStandardFragmentInsertionTagProcessor.doProcess
AbstractStandardFragmentInsertionTagProcessor#computeFragment似乎总是会失败。
这似乎与another answer相反。我是否已尝试使用th:include
,th:insert
和th:replace
是否可以检测是否定义了片段(以便我可以选择不同的片段)?或者,可以使用哪些工具来处理丢失的碎片以及调整它们的杠杆在哪里?
我对Thymeleaf很新,所以我可能错过了一些相当基本的东西。
答案 0 :(得分:1)
总是这样,我在提交问题后发现了一些东西。
advanced conditional insertion of fragments的文档包含了我正在努力实现的目标
我的片段插入现在看起来像
<div th:replace="~{:: __${entity.fields[code]}__} ?: _">
Invalid code
</div>