Sarath
Sarath

Reputation: 1496

Unable to iterate over List<List<String>> using Thymeleaf / Spring-Boot

Using Thymeleaf, I am unable to iterate over List<List<String>>

 <tr th:each="row : ${rows}">
      <td th:text="${row[0]}"></td>
      <td th:text="${row[1]}"></td>
 </tr>

Each row has more than 1 value.

When rendering, I am getting the following exception

2016-11-02 20:40:21.033 ERROR 44829 --- [nio-5252-exec-1] org.thymeleaf.TemplateEngine             : [THYMELEAF][http-nio-5252-exec-1] Exception processing template "completed": Exception evaluating SpringEL expression: "row[1]" (completed:217)
2016-11-02 20:40:21.034 ERROR 44829 --- [nio-5252-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet]      : Servlet.service() for servlet [dispatcherServlet] in context with path [/test-dashboard] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "row[1]" (completed:217)] with root cause

org.springframework.expression.spel.SpelEvaluationException: EL1025E:(pos 3): The collection has '1' elements, index '1' is invalid

Thanks in advance.

Upvotes: 0

Views: 1406

Answers (2)

David Lavender
David Lavender

Reputation: 8331

If you just want to generate a TD for each of them, add another for-each, on a TD:

<tr th:each="row : ${rows}">
     <td th:each="rowValue : ${row}" th:text="${rowValue}"></td>
</tr>

Upvotes: 1

Mechkov
Mechkov

Reputation: 4324

How about a double loop?

(note that i am not sure about the validity of this XHTML, you might have to use a different HTML element than a SPAN under a TR)

<tr th:each="row : ${rows}">
      <span th:each="s : ${row}">
         <td th:text="${s}"></td>             
      </span>
 </tr>

Upvotes: 2

Related Questions