我想这样做:
<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>