【问题标题】:How to use thymeleaf conditions - if - elseif - else如何使用百里香条件 - if - elseif - else
【发布时间】:2015-06-16 04:09:58
【问题描述】:

我有一个小问题,我必须使用百里香将一个选择的不同选择返回到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)没有问题,但我需要为我的表单中的选择获取正确的标签。

有人知道在百里香中使用 if elseif 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>

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

【问题讨论】:

    标签: thymeleaf


    【解决方案1】:

    您的条件运算符包含 3 个结果。应该有2个这样的。

    condition ? first_expression : second_expression;
    

    在你的情况下。我假设linea.estado 是boolean 值

    <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
    • 注意语法错误,因为我没有在运行时测试任何代码

    【讨论】:

    • 我知道你只能有两个条件,因为我被要求提供一个替代方案。 Linea.estado 不是布尔值,这就是问题所在。
    • 我会尝试那个解决方案,因为我的开关有问题,谢谢。
    • 好的,现在它可以工作了,我的变量有问题,使用 linea.idestado 它可以工作....谢谢大家
    【解决方案2】:

    我认为解决方案是使用 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 中没有任何其他结构可以使用,尽管您可以使用 th:if/th:unless。查看 thymeleaf 论坛中的this 话题。

    【讨论】:

    • 我会尝试那个选项,我之前读过关于那个选项的信息,但我有关于表格集成的家伙。
    【解决方案3】:

    我需要 else if 但我的所有条件都不是那么简单以至于 th:switch="${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>
    

    【讨论】:

      【解决方案4】:

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

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

      有效。

      【讨论】:

      • 这是一个非常好的实现并解决了我的问题,但是,应该删除包含 action.url 的括号。更正后的版本是:

      【解决方案5】:

      如果您只想拥有一个元素,则可以选择创建多个条件。 这有点令人困惑,但如果你理解其中的逻辑,这没什么大不了的。

      假设你想做这样的事情:

      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>
      

      【讨论】:

        【解决方案6】:

        你也可以这样做

        <p th:if="${projects != null and projects.size() gt 0}"> <a th:href="@{/hire/invite/} + ${f.id}" class="btn waves-effect">Anything</a> </p>
        
        其他

        【讨论】:

          猜你喜欢
          • 2019-01-04
          • 2014-01-07
          • 2021-06-17
          • 2018-02-03
          • 2021-07-11
          • 1970-01-01
          • 1970-01-01
          • 2023-04-09
          • 2017-04-05
          相关资源
          最近更新 更多