Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

If-Else in a th:each statement in Thymeleaf

What I want is an if-else in a th:each statement in Thymeleaf.

If currentSkill != null, then show table with content, else 'You don't have any skills'

This is the code without the if/else:

<div th:each="skill : ${currentSkills}">
    <table>
         <tr><td th:text="${skill.name}"/></tr>
    </table>
</div>
like image 996
user3652575 Avatar asked May 19 '14 12:05

user3652575


2 Answers

<div  th:if="${currentSkills != null}">
    <table>
         <tr th:each="skill : ${currentSkills}"><td th:text="${skill.name}"/></tr>
    </table>
</div>
<div th:if="${currentSkills == null}">
   You don't have any skills
</div>

If currentSkills is a list, you can use the #lists utility like so (which is more correct than the above code since it also takes into account the possibility where the object is not null but is empty):

 <div  th:if="!${#lists.isEmpty(currentSkills)}">
    <table>
         <tr th:each="skill : ${currentSkills}"><td th:text="${skill.name}"/></tr>
    </table>
</div>
<div th:if="${#lists.isEmpty(currentSkills)}">
   You don't have any skills
</div>

You could do the same if currentSkills is an array by just replacing #lists with #arrays.

Note that in both cases isEmpty() returns true whether the object is null or has zero items.

like image 181
geoand Avatar answered Sep 19 '22 13:09

geoand


You can use

<div  th:if="${!currentSkills.isEmpty()}">
    <table>
         <tr th:each="skill : ${currentSkills}"><td th:text="${skill.name}"/></tr>
    </table>
</div>
like image 29
Marcos Nunes Avatar answered Sep 22 '22 13:09

Marcos Nunes