2016-12-13 6 views
4

Ich benutze Thymeleaf verpackt mit Spring-Boot. Hier ist die Hauptvorlage:ThymeLeaf Fragment ausgeführt auf false th: wenn

<div class="container"> 
    <table th:replace="fragments/resultTable" th:if="${results}"> 
     <tr> 
      <th>Talent</th> 
      <th>Score</th> 
     </tr> 
     <tr> 
      <td>Confidence</td> 
      <td>1.0</td> 
     </tr> 
    </table> 
</div> 

Und es nutzt dieses Fragment:

<table th:fragment="resultTable"> 
    <tr> 
     <th>Talent</th> 
     <th>Score</th> 
    </tr> 
    <tr th:each="talent : ${talents}"> 
     <td th:text="${talent}">Talent</td> 
     <td th:text="${results.getScore(talent)}">1.0</td> 
    </tr> 
</table> 

Das Fragment funktioniert nur, wenn es ein Ergebnis Objekt ist. Das macht Sinn für mich. Basierend auf der Syntax von documentation habe ich die th:if-Anweisung der Hauptvorlagendatei hinzugefügt. Allerdings bin immer ich diesen Fehler, wenn ich die Vorlage zugreifen, ohne ein Objekt

Attempted to call method getScore(com.model.Talent) on null context object 

Sollte nicht die th:if Aussage, dass Code verhindern zugegriffen wird?

Die Vorlage funktioniert immer noch, wenn das Ergebnisobjekt gefüllt ist, aber wie bekomme ich den Nullfall ohne die Tabelle zu rendern?

+1

Wie wäre es mit einem Null-Check innerhalb des Fragments selbst –

Antwort

3

Die Fragmenteinbindung hat eine höhere Priorität als th: if.

http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#attribute-precedence

Sie werden wahrscheinlich die th bewegen müssen: Wenn Sie zu einem Tag über. Entweder im Container div, oder wenn Sie immer noch den Container div benötigen, dann ein th: Block wie folgt:

<div class="container"> 
    <th:block th:if="${results}"> 
     <table th:replace="fragments/resultTable"> 
      <tr> 
       <th>Talent</th> 
       <th>Score</th> 
      </tr> 
      <tr> 
       <td>Confidence</td> 
       <td>1.0</td> 
      </tr> 
     </table> 
    </th:block> 
</div> 
Verwandte Themen