如果在Thymeleaf其他如何做?
在Thymeleaf中做一个简单的if-else的最好方法是什么?
我想在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
。 这就是为什么我引入局部variablescondition
。
我仍然不喜欢同时使用th:if="${condition}
和th:unless="${condition}"
。
重要的是我使用2个不同的html标签:让我们说h2
和span
。
你能提出一个更好的方法来实现它吗?
Thymeleaf具有相当于<c:choose>
和<c:when>
:thymeleaf 2.0中引入的th:switch
和th: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>
请参阅http://www.thymeleaf.org/whatsnew20.html#swit以获取语法(或thymeleaf教程)的快速解释。;
免责声明,按照StackOverflow规则的要求:我是thymeleaf的作者。
我试过这个代码来找出客户是否login或匿名。 我没有使用th:if
和th:unless
条件expression式。 很简单的方法来做到这一点。
<!-- 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>
除了丹尼尔·费尔南德斯(DanielFernández)之外,我想分享我的安全相关的例子。
<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>
这里是复杂的expression式,混合的“authentication”和“授权”实用程序对象会为thymeleaf模板代码生成“真/假”结果。
'authentication'和'授权'实用程序对象来自thymeleaf extras springsecurity3库 。 当'authentication'对象不可用或者authorization.expression('isAuthenticated()')计算结果为'false'时,expression式返回$ {false},否则返回$ {true}。
您可以使用
If-then-else: (if) ? (then) : (else)
例:
'User is of type ' + (${user.isAdmin()} ? 'Administrator' : (${user.type} ?: 'Unknown'))
对新人提出同样的问题可能是有用的。
另一个解决scheme – 你可以使用局部variables:
<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>
更多关于局部variables:
http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#local-variables
在更简单的情况下(当html标签是相同的):
<h2 th:text="${potentially_complex_expression} ? 'Hello' : 'Something else'">/h2>
另一个解决scheme就是not
使用相反的否定:
<h2 th:if="${potentially_complex_expression}">Hello!</h2> <span class="xxx" th:if="${not potentially_complex_expression}">Something else</span>
在文档中解释说,使用th:unless
也是一样th:unless
像其他答案一样解释:
另外,
th:if
有反向属性,th:unless
我们在前面的例子中可以使用, 而不是使用不在OGNLexpression式内部
所以,defintetively使用not
它也可以,但恕我直言更可读的使用th:unless
不否认not
的条件。