I am trying to iterate over list with keeping track of iteration and I want to place iteration index into array index of that list:
What I tried:
<tr th:each="experience, iter : *{experiences}">
<td>Experience name:</td>
<td><input type="text" th:field="*{experiences[iter.index]}" value="${experience.name}">
</tr>
Here I get NumberFormatException
. So I tried to use $
, because I think that iter
is a variable:
<tr th:each="experience, iter : *{experiences}">
<td>Experience name:</td>
<td><input type="text" th:field="*{experiences[${iter.index}]}" value="${experience.name}">
</tr>
Here, ${iter.index}
is not evaluated, so I get error that ${iter.index}
is not a number (again NumberFormatException
).
CodePudding user response:
You can use the iter.index
using 2 underscores.
<tr th:each="experience, iter : *{experiences}">
<td>Experience name:</td>
<td><input type="text" th:field="*{experiences[__${iter.index}__]}" />
</tr>
__${...}__
syntax is a preprocessing expression, which is an inner expression that is evaluated before actually evaluating the whole expression. https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf#preprocessing