Render List of Elements in Qute

In qute, we can use for or each loop sections in order to iterate arrays or collection types like list, set or map.

Note: An implicit alias it is registered always when you use each section instead of for section. Thus, no need to use any alias, such as

Syntax:

//when you use for
{#for item in items} //item is an alias
    {item.name}
{/for}
//when you use each
{#each items} //no alias required
    {it.name} //implicit it alias
{/each}

Let's see an example where we will try to display list of values using for section.

PlanetResource

package com.company;

//respective packages

@Path("/")
public class PlanetResource {

    @Inject
    Template planet;

    @GET
    @Path("/planets")
    @Produces(MediaType.TEXT_HTML)
    @Consumes(MediaType.TEXT_HTML)
    public TemplateInstance planetView(){
        List<String> planets = List.of(
            "Earth", "Jupiter", "Saturn", "Mars",
            "Neptune", "Venus", "Uranus", "Mercury"
        );
        
        return planet.data("planets", planets);
    }
}

planet.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Qute Template Engine</title>
</head>
<body>
<div>
    <h2>Planets of Our Solar System</h2>
    <ul>
        {#for planet in planets}
            <li>{planet}</li>
        {/for}
    </ul>
</div>
</body>
</html>

Now, start your development server and invoke the uri http://localhost:8080/planets in your favourite web browser. If everything is going well, you will see that the planets list has been rendered.

qute-tutorial

Accessing Iteration Metadata

The following keys are valid to use in the loop as well in order to access the iteration metadata. Such as,

count - 1-based index

index - zero-based index

hasNext - true if the iteration has more elements

isLast - true if hasNext == false

isFirst - true if count == 1

odd - true if the element’s count is odd

even - true if the element’s count is even

indexParity - outputs odd or even based on the count value

Note: However, the keys cannot be used directly. Instead, a prefix is used to avoid possible collisions with variables from the outer scope. By default, the alias of an iterated element suffixed with an underscore is used as a prefix. For example, the hasNext key must be prefixed with it_ inside an {#each} section: {it_hasNext}.

Let's how to use count key method in for section.

planet.html

<h2>Planets of Our Solar System</h2>
<ul>
    {#for planet in planets}
        <li style="list-style: none">{planet_count} - {planet}</li>
    {/for}
</ul>

If you again access this uri http://localhost:8080/planets you will see planet list with one based index.

qute-tutorial

Thanks.