如何使用百日咳条件 - 如果 - elseif - 否则

时间:2015-04-10 12:27:48

标签: 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)没有问题,但我需要在表单中为select选择正确的标签。

任何人都知道正确的判决是否使用了带有百里香的if ifif else句子?

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>

解决方案很完美,现在一切正常。谢谢大家。

6 个答案:

答案 0 :(得分: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>

或使用 Patrick LC

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

答案 1 :(得分:3)

我认为解决方案是使用来自Thymeleaf documentation的switch语句:

<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中没有任何其他结构可用,但你可以使用th:if / th:除非。检查百万富翁论坛中的this主题。

答案 2 :(得分:2)

我需要其他但是我的所有条件都不是那么简单以至于:switch =&#34; $ {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>

答案 3 :(得分:2)

下次如果你想要if - elsif -else,你可以这样做: (例如,我想知道我的操作对象上的url是否包含汇总然后confluence如果它包含jira,那么jira就是:text)

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

有效。

答案 4 :(得分: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>

答案 5 :(得分: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