Reputation: 6611
I am new in thymeleaf
, and trying to iterate values using thymeleaf
th:each
attribute, but get wrong output. I am using <div>
instead of table, when thymeleaf render the page, all objects values override the first row values and rest of the rows are empty show. Following is my code:
My Spring MVC controller code
ProductCategory category = new ProductCategory();
category.setId(BigInteger.valueOf(558711));
category.setTitle("Category 1");
category.setStatus(FinEnum.STATUS.IN_ACTIVE.getStatus());
ProductCategory category2 = new ProductCategory();
category.setId(BigInteger.valueOf(558722));
category.setTitle("Category 2");
category.setStatus(FinEnum.STATUS.ACTIVE.getStatus());
List<ProductCategory> categories = new ArrayList<ProductCategory>();
categories.add(category);
categories.add(category2);
model.addAttribute("categories", categories);
return "admin/product/view-categories";
My thymeleaf code:
<div class="row-area" th:each="category: ${categories}">
<div class="column2 tariff-date" style="width: 15%;"><span th:text="${category.id}">Dummy Data</span></div>
<div class="column2 tariff-date" style="width: 15%;"><span th:text="${category.title}">Dummy Data</span></div>
<div class="column2 tariff-date" style="width: 13%;"><span th:text="${category.status}">Dummy Data</span></div>
<div class="column5 icons middle-area" style="margin-left: 7px; width: 40%;">
<a href="javascript:void(0)" class="diplay-none"></a>
<a class="icon7" href="javascript:void(0)" style="width: 140px;">View Sub Category</a>
<a class="icon2" href="javascript:void(0)"><p>Edit</p></a>
<div th:switch="${category.status}" style="margin-left: 195px;">
<a class="icon8" href="javascript:void(0)" th:case="'Inactive'" style="width: 88px;">Deactivate</a>
<a class="icon9" href="javascript:void(0)" th:case="'Active'">Active</a>
</div>
<a class="icon14" href="javascript:void(0)" style="width: 60px;"><p>Delete</p></a>
</div>
</div>
My Output is:
Upvotes: 1
Views: 10544
Reputation: 593
The problem has nothing to do with Thymeleaf, it's just a simple typo. After the line:
ProductCategory category2 = new ProductCategory();
you are still modifying (overwriting) the category
object instead of category2
. Therefore, the properties of category2
never got set. Corrected code should be:
category2.setId(BigInteger.valueOf(558722));
category2.setTitle("Category 2");
category2.setStatus(FinEnum.STATUS.ACTIVE.getStatus());
Tested this locally and saw we "rows" of data after the fix.
Upvotes: 3