web-dev-qa-db-ja.com

thymeleaf条件の使用方法-if-elseif-else

私には少し問題があります。thymeleafを使用してtdにselectの別の選択を返さなければなりません。次の文を試します:

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

しかし、式を解析することが不可能であるために条件が私に大きな失敗を与えるため、私には問題があります。 2つの条件(iniciadoとfinalizado)だけで問題はありませんが、フォームでselectの正しいラベルを取得する必要があります。

誰かがthyseleafで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>

解決策は完璧で、現在はすべて正常に機能します。全てに感謝。

10
Deckard27

条件演算子には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を使用

  • ランタイムでコードをテストしなかったため、構文エラーに注意してください
35
Faraj Farook

解決策は、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:unlessを使用できます。 thymeleafフォーラムの this threadを確認してください。

3

次回は、if - elsif -elseできること:(たとえば、アクションオブジェクトのurlにconfluenceが含まれているかどうか、次にconfluence elseにjiraが含まれている場合、th_textにjiraが含まれているかどうかを知りたい)

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

できます。

2
Ibrahima Timera

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>
2
Ng Sek Long

要素を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>
1
Nikolay Hristov

あなたもそうすることができます

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