How to have multiple condition in an th:if tag using thymeleaf

JavaHtmlSpringJstlThymeleaf

Java Problem Overview


I have a text to render in three different possible colors using thymeleaf.

So the code I've made so far to test the value is:

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

And that works well.

But the third test is for values between those two. So I tried:

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

but it's not working, I've got this error while parsing:

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

Of course, these lines are between tags since the first two are working properly.

Maybe the and operand is not correct, but the documentation of thymeleaf is not really explicit on those operands.

All ideas are welcome!

Update: I got the answer from the thymeleaf forum. The way to do it is:

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

Problem solved!

Java Solutions


Solution 1 - Java

I got the answer from the thymeleaf forum. The way to do it is :

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

Problem solved !

Solution 2 - Java

This is what worked for me:

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

Solution 3 - Java

In my opinion, a better and more maintainable solution could be to write the evaluation code in a proper class.

class Evaluator{

private int value;
....

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

then in thymeleaf, call the function:

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

Some benefits:

  1. Cleaner template.
  2. Control in java code.
  3. Isolation. More complex evaluations could be written without changing the template.

I hope this helps.

Solution 4 - Java

I did this to have multiple conditions in th:if in thymeleaf

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

I added the and operator between conditions. You can also add or if needed.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionbrnrdView Question on Stackoverflow
Solution 1 - JavabrnrdView Answer on Stackoverflow
Solution 2 - Javauser2779653View Answer on Stackoverflow
Solution 3 - JavaFrancisco Perez PellicenaView Answer on Stackoverflow
Solution 4 - JavaDigvijayView Answer on Stackoverflow