th:with中的Thymelaf嵌套条件



我想这样做:

<div id="header_nav" th:fragment="header_nav (someId)" th:with="navPrefix=${'/content' + (someId ? ('/'+someId) : '')"}">

然后在div中使用它作为*{navPrefix}。不知何故,我没有通过条件嵌套获得它。有人能帮我吗?谢谢!

我怀疑这是因为在使用片段时使用了th:include。根据Thymelaf文档,th:include仅包括片段内容:

th:include会将片段的内容包含到其宿主标签中,而th:replace实际上会用片段的替换宿主标签

如果您使用的是th:include,那么您的th:with将不会包含在内,因此它将始终为空。您可以在与th:fragment声明相同的元素中的其他属性(如style)中观察到这一点。

您可以使用th:replace来解决这个问题,它将交换整个片段,而不仅仅是内容。或者,您可以用th:block包装您的片段内容,您可以使用它来定义navPrefix:

<div th:fragment="header_nav(someId)">
    <th:block th:with="navPrefix = ${'/content' + (someId != null ? ('/' + someId) : '')} ">
        ... contents of fragment ...
    </th:block>
</div>

我看到的唯一问题是末尾有多余的双引号,并且当传入String时,三元运算符不包含布尔表达式。

以下操作用于显示块中的前缀或传递的参数:

<div id="header_nav" 
    th:fragment="header_nav(someId)" 
    th:with="navPrefix = ${'/content' + (someId != null ? ('/' + someId) : '')} ">
        <div th:text="${someId}"></div>
        <div th:text="${navPrefix}"></div>
</div>

最新更新