我正在使用包装有Spring-Boot的Thymeleaf。这是主要模板:
<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>
该片段仅在有结果对象的情况下有效。这对我来说很有意义。因此,根据文档中的语法,我将该th:if语句添加到了主模板文件中。但是,在没有对象的情况下访问模板时,仍然出现此错误
th:if
Attempted to call method getScore(com.model.Talent) on null context object
th:if语句不应该阻止该代码被访问吗?
当填充结果对象时,模板仍然可以正常工作,但是如何在不使用表的情况下呈现空大小写呢?
片段包含的运算符优先级高于th:if。
http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#attribute- precedence
您可能必须将th:if移至上方的标签。在容器div中,或者如果仍然需要容器div,则可以使用如下所示的th:block:
<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>