2016-12-13 6 views
4

私はThymeleafをSpring-Bootでパッケージ化して使用しています。ここでは主なテンプレートです:ThymeLeafフラグメントがfalse thで実行された場合:

<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> 

そしてそれは、このフラグメントを使用しています。結果オブジェクトが存在する場合

<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> 

断片でのみ動作します。それは私には意味がある。したがって、documentationの構文に基づいて、th:ifステートメントをメインテンプレートファイルに追加しました。私はオブジェクト

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

せずにテンプレートにアクセスするときしかし、私はまだ、このエラーを取得していth:ifの文がアクセスされているから、そのコードを防ぐべきではないでしょうか。

結果オブジェクトが移入されたときでもテンプレートは正常に動作しますが、テーブルなしでレンダリングするにはどうすればnullケースが得られますか?

+1

フラグメント自体の内部でヌルチェックを追加する方法 –

答えて

3

フラグメントインクルードは、th:より高い演算子優先度を持ちます。タグの場合は、上記:

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

はおそらく目を移動する必要があります。コンテナdiv内にある場合、またはコンテナdivがまだ必要な場合は、次のようにth:ブロックを作成します。

<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> 
関連する問題