如何使用thymeleaf条件 - 如果 - ELSEIF - 其他

问题描述 投票:10回答:6

我有一个小问题,我必须用thymeleaf,我试了下一句返回不同的选择,一个选择的成td

<td style="white-space: nowrap">
    <span th:class="${linea.estado}? 'label label-success' : 'label label-danger' : 'label label-warning'"
          th:text="${linea.estado}? #{label.glineas.estado.iniciado} : #{label.glineas.estado.finalizado} : #{label.glineas.estado.configurado}">
    </span>
</td>

但我有一个问题,因为条件给我一个很大的失败,因为无法解析表达式。由于只有两个条件(iniciado和finalizado)不会有问题,但我需要为选择正确的标签在我的形式。

任何人都知道正确的文本使用,如果elseif的其他句子thymeleaf?

2.0现在我试图解决这个问题下一个:

<td style="white-space: nowrap">
    <span th:if="${linea.estado} == 'Iniciado'" class="label label-success" th:text="#{label.glineas.estado.iniciado}"></span>
    <span th:if="${linea.estado} == 'Finalizado'" class="label label-danger" th:text="#{label.glineas.estado.finalizado}"></span>
    <span th:if="${linea.estado} == 'Configuracion'" class="label label-warning" th:text="#{label.glineas.estado.configurado}"></span>
</td>

该解决方案是完美的,现在一切工作正常。感谢所有。

thymeleaf
6个回答
35
投票

你有条件的经营者包含3个结果。它应该有2个这样的。

condition ? first_expression : second_expression;

在你的情况。我认为linea.estadoboolean

<td style="white-space: nowrap">
    <span th:class="${linea.estado} ? 'label label-success' : 'label label-danger'" 
        th:text="${linea.estado}? #{label.glineas.estado.iniciado} : #{label.glineas.estado.finalizado}">
    </span>
</td>

如果你想成为输出并给予3个值的linea.estado是可能含有'WARN', 'DANGER', 'INFO'那么你可以做这样的事情的字符串。

<span th:class="'label label-' + ((${linea.estado} == 'SUCCESS') ? 'success' : (${linea.estado} == 'DANGER') ? 'danger' : 'warning')"                   
      th:text="...">
</span>

但更简洁的方案会是这样的

<span th:if="${linea.estado} == 'SUCCESS'" class="label label-success" th:text="#{label.glineas.estado.iniciado}"></span>
<span th:if="${linea.estado} == 'DANGER'" class="label label-danger" th:text="#{label.glineas.estado.finalizado}"></span>
<span th:if="${linea.estado} == 'WARN'" class="label label-warning" th:text="#{label.glineas.estado.configurado}"></span>

或者用Switch由帕特里克LC提到

  • 注意语法错误的,因为我没有测试在运行任何代码

3
投票

我认为解决的办法是使用switch语句,从Thymeleaf documentation

<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使用,虽然你可以使用J:如果/日:除非。检查在thymeleaf论坛this线程。


2
投票

我需要其他人,如果但我所有的条件都没有如此简单,个:开关=“$ {} user.role可的作品,所以我这样做:

<div th:switch="true">
    <p th:case="${product.price} == '849'"> Beautiful Goat</p>
    <p th:case="false"> Magnificent Goat</p>
    <p th:case="'Whatever things I want to do with my else if'"> Goat</p>
</div>

2
投票

对于接下来的时间,如果你想if - elsif -else你可以这样做:(例如我想知道如果我的行为对象上的网址中包含汇合,然后confluence否则,如果它包含JIRA然后jira在th:文本)

<p th:text="((${#strings.contains({action.url},'confluence')}) ? 'confluence' : ((${#strings.contains({action.url},'jira')}) ? 'jira' : '')) " />

有用。


1
投票

如果你想有只有一个元素的选择是使多个条件。这是混淆了一点点,但如果你理解其中的逻辑是不是一个大问题。

比方说,你想要做这样的事情:

if(user.role.admin){
 //add only class='text-success'
}else if(user.role.user){
 //add only class='text-primary'
}else{
 //add only class='text-warning'
}

该逻辑if1 : 'text-success' ? if2 : 'text-primary' ? 'text-warning'很简单。但语法会是这样:

<span th:class="( ${user.role.admin} ? 'text-success' : ( ${user.role.user} ? 'text-primary' : 'text-warning' ) )"></span>

0
投票

你可以不喜欢太

<p th:if="${projects != null and projects.size() gt 0}"> <a th:href="@{/hire/invite/} + ${f.id}" class="btn waves-effect">Anything</a> </p>
Otherthing
© www.soinside.com 2019 - 2024. All rights reserved.