Как использовать условия тимелеафа - if - elseif - else

У меня есть небольшая проблема, я должен вернуть другой выбор select в td с помощью thymeleaf, я попробую следующее предложение:

<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 else else 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>

Решение отлично, теперь все работает правильно. Спасибо всем.

Ответ 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>

Или используя Switch, как упомянуто Патриком LC

  • знать о синтаксических ошибках, так как я не тестировал коды во время выполнения

Ответ 2

Я думаю, что решение заключается в использовании оператора switch, от Thymeleaf документации:

<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: if. Отметьте эту нить на форуме thymeleaf.

Ответ 3

Мне нужно другое, если все мое условие не так просто, что может работать 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

Вы тоже можете сделать это

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