如果在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标签:让我们说h2span

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

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> 

请参阅http://www.thymeleaf.org/whatsnew20.html#swit以获取语法(或thymeleaf教程)的快速解释。;

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

我试过这个代码来找出客户是否login或匿名。 我没有使用th:ifth: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的条件。