web-dev-qa-db-ja.com

thymeleafを使用してth:ifタグに複数の条件を設定する方法

thymeleafを使用して、3つの可能な色でレンダリングするテキストがあります。

したがって、値をテストするためにこれまでに作成したコードは次のとおりです。

th:if="${evaluation} > 50"
th:if="${evaluation} < 30"

そしてそれはうまくいきます。

しかし、3番目のテストは、これら2つの間の値に対するものです。だから私は試しました:

th:if="(${evaluation} < 49) ∧ (${evaluation} > 29)"

しかし、それは機能していません、解析中にこのエラーが発生しました:

org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: "(${evaluation} < 49) &and; (${evaluation} > 29)" (/property.html:41)

もちろん、最初の2つは適切に機能しているため、これらの行はタグの間にあります。

Andオペランドは正しくないかもしれませんが、thymeleafのドキュメントはそれらのオペランドについて実際には明示的ではありません。

すべてのアイデアを歓迎します!

更新: thymeleafフォーラムから回答を得ました。その方法は次のとおりです。

th:if="${evaluation &lt; 49 and evaluation &gt; 29}"

問題が解決しました!

41
brnrd

私はthymeleafフォーラムから答えを得ました。それを行う方法は次のとおりです。

th:if="${evaluation &lt; 49 and evaluation &gt; 29}"

問題が解決しました !

52
brnrd

これは私のために働いたものです:

th:if="${evaluation lt 49 and evaluation gt 29}"
19
user2779653

私の意見では、より適切で保守しやすいソリューションは、適切なクラスで評価コードを書くことです。

class Evaluator{

private int value;
....

public boolean isBounded() {
    return value < 49 && value > 29;
}

次に、thymeleafで関数を呼び出します。

<p th:if="${evaluator.isBounded()} ...

いくつかの利点:

  1. よりクリーンなテンプレート。
  2. Java code。
  3. 分離。テンプレートを変更せずに、より複雑な評価を作成できます。

これがお役に立てば幸いです。

Thymeleafのth:ifに複数の条件を設定するためにこれを行いました

<div 
     th:if="${object.getStatus()} == 'active' and ${object.getActiveDate()}"
     th:text="${#dates.format(object.getActiveDate(), 'yyyy-MM-dd')}"
</div>

条件の間にand演算子を追加しました。必要に応じてorを追加することもできます。

5
Digvijay