我正在使用Thymeleaf与Spring-Boot一起打包。这是主要模板:
<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 case?
答案 0 :(得分:8)
片段包含的运算符优先级高于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>
答案 1 :(得分:0)
在Thymeleaf 3.0中,只有在满足条件的情况下,才可以使用无操作令牌插入/替换,如下所示:
<table th:replace="${results} ? ~{fragments :: resultTable} : _">