2017-12-08 1 views
0

Ich habe eine Spring Boot (2M6) -Anwendung, die Thymeleaf verwendet, um einige HTML-Dokumente zu rendern.Thymeleaf ignorieren Fragment nicht gefunden

Meine Vorlagen enthalten einige Fragmente, die letztlich basierend auf Benutzereingaben ausgewählt werden. In manchen Fällen führt die Benutzereingabe zur Auswahl eines Fragments, das nicht existiert.

Dies ist ein Fehler, und dies führt derzeit zu einer Ausnahme und die Vorlage wird nicht gerendert. Ich möchte entweder ein anderes, standardmäßiges "ungültiges Auswahl" -Fragment oder vielleicht sogar ein leeres Fragment rendern.

Das obere Ende des Stack-Trace sieht wie folgt aus

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] 

Wenn entity.fields[code] einen Wert enthält, für die eine passende th:fragment gibt, alles ist gut.

Arbeiten zurück von AbstractStandardFragmentInsertionTagProcessor.doProcess

AbstractStandardFragmentInsertionTagProcessor#computeFragment scheint nach Wahl, immer fehlschlagen, wenn das Fragment existiert nicht.

Dies scheint im Gegensatz zu another answer zu sein. FWIW Ich habe versucht mit th:include, th:insert und th:replace

Ist es möglich zu erkennen, ob ein Fragment definiert ist (so dass ich dann ein anderes Fragment auswählen kann)? Oder alternativ, welche Werkzeuge sind verfügbar, um fehlende Fragmente zu bearbeiten und wo sind die Hebel, um sie anzupassen?

Ich bin ziemlich neu zu Thymeleaf, also habe ich wahrscheinlich etwas ziemlich Grundlegendes vermisst.

Antwort

0

Wie immer der Weg ist, finde ich etwas nach dem Einreichen der Frage.

Die Dokumentation für advanced conditional insertion of fragments ein Beispiel dessen, was beinhaltet Ich versuche

Mein Fragmentinsertion jetzt wie

sieht
<div th:replace="~{:: __${entity.fields[code]}__} ?: _"> 
    Invalid code 
</div> 
zu erreichen
Verwandte Themen