th:remove 内的 hasRole() 不工作

hasRole() within th:remove is not working

我想禁用特定的 link 但保留其文本,使其看起来像是被禁用了。我试图在锚标记内放置一个具有特定条件的 th:remove。我在 ThymeLeaf 教程页面上找到了这个:

<a href="/something" th:remove="${condition}? tag">Link text not to be removed</a>

基于此,我尝试这样做:

<li>
    <a th:href="@{/config/mod/}"
       th:remove="${#authorization.expression('hasRole(''VIEW_MODULE_STATUS'')')}? tag">
        <i class="fa fa-gear"></i>&nbsp;[[#{webadmin.view.config.module.title.short}]]
    </a>
</li>

其中 VIEW_MODULE_STATUS 是角色。该条件似乎不工作,我不明白为什么。

仅供参考:我在锚标记中使用了 sec:authorize="hasRole('VIEW_MODULE_STATUS')",它工作正常。我想避免这种方法,因为它完全删除了文本和 link。是否有任何其他方法可以禁用 link 并使用 ThymeLeaf 保留文本?

(我正在使用 ThymeLeaf 3.0)

表达式 th:remove="${#authorization.expression('hasRole(''VIEW_MODULE_STATUS'')')}? tag"

中使用的三元运算符有误

三元运算符的形式为 condition? 'true' : 'false'。所以你必须更新你的表达。然后你不能禁用一个 <a> 标签,你唯一能做的就是更新它的 href 属性为 #javascript:void(0); 这样它就没有任何动作。您可以如下所示进行操作:

th:href="${#authorization.expression('hasRole(''VIEW_MODULE_STATUS'')') ? '/something' : '#'}"