在 Thymeleaf 怎样做如果-否则?

在 Thymeleaf 做一个简单的 abc 0-abc 1最好的方法是什么?

我想在 Thymeleaf 达到同样的效果

<c:choose>
<c:when test="${potentially_complex_expression}">
<h2>Hello!</h2>
</c:when>
<c:otherwise>
<span class="xxx">Something else</span>
</c:otherwise>
</c:choose>

在 JSTL。

到目前为止,我的想法是:

<div th:with="condition=${potentially_complex_expression}" th:remove="tag">
<h2 th:if="${condition}">Hello!</h2>
<span th:unless="${condition}" class="xxx">Something else</span>
</div>

我不想评估 potentially_complex_expression两次。这就是为什么我引入了局部变量 condition。我还是不喜欢同时使用 th:if="${condition}th:unless="${condition}"

一个重要的事情是,我使用两个不同的 HTML 标记: 让我们说 h2span

你能提出一个更好的实现方法吗?

401377 次浏览

Thymeleaf 等价于 <c:choose><c:when>: Thymeleaf 2.0中引入的 th:switchth:case属性。

它们的工作原理与您预期的一样,在默认情况下使用 *:

<div th:switch="${user.role}">
<p th:case="'admin'">User is an administrator</p>
<p th:case="#{roles.manager}">User is a manager</p>
<p th:case="*">User is some other thing</p>
</div>

有关语法的快速解释,请参阅 这个(或 Thymeleaf 教程)。

免责声明 : 按照 StackOverflow 规则的要求,我是 Thymeleaf 的作者。

我尝试了这个代码,以查明是否有客户登录或匿名。我使用了 th:ifth:unless条件表达式。很简单的方法。

<!-- IF CUSTOMER IS ANONYMOUS -->
<div th:if="${customer.anonymous}">
<div>Welcome, Guest</div>
</div>
<!-- ELSE -->
<div th:unless="${customer.anonymous}">
<div th:text=" 'Hi,' + ${customer.name}">Hi, User</div>
</div>

除了丹尼尔 · 费尔南德斯之外,我还想分享一个与安全有关的例子。

<div th:switch="${#authentication}? ${#authorization.expression('isAuthenticated()')} : ${false}">
<span th:case="${false}">User is not logged in</span>
<span th:case="${true}">Logged in user</span>
<span th:case="*">Should never happen, but who knows...</span>
</div>

下面是混合了“身份验证”和“授权”实用工具对象的复杂表达式,它为胸腺叶模板代码生成“ true/false”结果。

“身份验证”和“授权”实用工具对象来自 百里香叶额外春天安全3库。 当“ Authenticated”对象不可用时,OR Authorization.expression (‘ isAuthenticated ()’)计算结果为“ false”,表达式返回 ${ false } ,否则返回 ${ true }。

你可以用

If-then-else:  (if) ? (then) : (else)

例如:

'User is of type ' + (${user.isAdmin()} ? 'Administrator' : (${user.type} ?: 'Unknown'))

对于新来的人来说,问同样的问题可能是有用的。

另一个解决方案——你可以使用局部变量:

<div th:with="expr_result = ${potentially_complex_expression}">
<div th:if="${expr_result}">
<h2>Hello!</h2>
</div>
<div th:unless="${expr_result}">
<span class="xxx">Something else</span>
</div>
</div>

关于局部变量的更多信息:
Http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#local-variables

另一种解决方案是使用 not得到相反的否定式:

<h2 th:if="${potentially_complex_expression}">Hello!</h2>
<span class="xxx" th:if="${not potentially_complex_expression}">Something else</span>

正如在 文件中所解释的,这和使用 th:unless是一回事。正如其他答案所解释的:

而且,th:if有一个反向属性 th:unless,我们可以使用它 在前面的例子 < strong > 中使用,而不是在 OGNL 中使用 not 表情

使用 not也可以,但是恕我直言,使用 th:unless代替使用 not否定条件更具可读性。

在更简单的情况下(当 html 标记相同时) :

<h2 th:text="${potentially_complex_expression} ? 'Hello' : 'Something else'">/h2>
<div th:switch="${user.role}">
<p th:case="'admin'">User is an administrator</p>
<p th:case="#{roles.manager}">User is a manager</p>
<p th:case="*">User is some other thing</p>
</div>




<div th:with="condition=${potentially_complex_expression}" th:remove="tag">
<h2 th:if="${condition}">Hello!</h2>
<span th:unless="${condition}" class="xxx">Something else</span>
</div>
<div style="width:100%">
<span th:each="i : ${#numbers.sequence(1, 3)}">
<span th:if="${i == curpage}">
<a href="/listEmployee/${i}" class="btn btn-success custom-width" th:text="${i}"></a
</span>
<span th:unless="${i == curpage}">
<a href="/listEmployee/${i}" class="btn btn-danger custom-width" th:text="${i}"></a>
</span>
</span>
</div>

在此输入图像描述

使用 th:switch作为 if-else

<span th:switch="${isThisTrue}">
<i th:case="true" class="fas fa-check green-text"></i>
<i th:case="false" class="fas fa-times red-text"></i>
</span>

使用 th:switch作为 switch

<span th:switch="${fruit}">
<i th:case="Apple" class="fas fa-check red-text"></i>
<i th:case="Orange" class="fas fa-times orange-text"></i>
<i th:case="*" class="fas fa-times yellow-text"></i>
</span>

当我想根据用户的性别展示一张照片时,这对我很有用:

<img th:src="${generou}=='Femenino' ? @{/images/user_mujer.jpg}: @{/images/user.jpg}" alt="AdminLTE Logo" class="brand-image img-circle elevation-3">

If-then-else 有2个变体。

第一:

<form method="get" th:action="@{/{id}(id=${user.isAdmin()}?'admin':'user')}">
<input type="submit" value="to Main"/>
</form>

第二:

<th:block th:if!="${branchMessages.isEmpty()}">
...
</th:block>
<th:block th:unless="${branchMessages.isEmpty()}">
...
</th:block>
<div th:switch="true">
<div th:case="${condition}=='1'">answer1...</div>
<div th:case="${condition}=='2'">answer2...</div>
<div th:case="*">answer3...</div>
</div>