Search code examples
htmlthymeleaf

How to print array like matrix with Thymeleaf


I have one array:

private int[] array = {0,1,2,3,4,5,6,7,8,9,10,11,12,13};

I'm doing the print:

<table>
     <tr th:each="ar : ${array }">
         <td th:text="${ar}"></td>
     </tr>
</table>

But print bellow each one:

0

1

2

3

How to display it using Thymeleaf like matriz:

0  1  2  3  4 5 6 

13 12 11 10 9 8 7

Solution

  • If you want it in a grid, you should first have your data set up like a grid.

    This:

    private int[] array = {0,1,2,3,4,5,6,7,8,9,10,11,12,13};
    

    Should rather be:

    int[][] matrix = {
        {0,1,2,3,4,5,6},
        {7,8,9,10,11,12,13}
    };
    

    Then your ThymeLeaf is easily produced:

    <table>
        <tr th:each="row: ${matrix}">
            <td th:each="value: ${row}" th:text="${value}" />
        </tr>
    </table>
    

    If you really do want to produce the table from a single array, you're going to have to make assumptions about your data. From the original data, this would work for example (but would not work if the original array changed length):

    <table>
        <tr th:each="row: ${#numbers.sequence(0, 1)}">
            <td th:each="col: ${#numbers.sequence(0, 6)}" th:text="${array[(row * 7) + col]}" />
        </tr>
    </table>