一尘不染

百里香叶片段在错误的th:if上执行

spring-boot

我正在使用包装有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语句添加到了主模板文件中。但是,在没有对象的情况下访问模板时,仍然出现此错误

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

th:if语句不应该阻止该代码被访问吗?

当填充结果对象时,模板仍然可以正常工作,但是如何在不使用表的情况下呈现空大小写呢?


阅读 217

收藏
2020-05-30

共1个答案

一尘不染

片段包含的运算符优先级高于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>
2020-05-30