Up to now we have seen simple attributes, i.e. attributes that have a simple value: a template, a string or a definition. But there are cases where you need a collection of values, for example a list of definitions to be redendered one below the other.
To include a list attribute you can use the <put-list-attribute> tag in your Tiles definitions file:
<definition name="myapp.homepage.body" template="/layouts/variable_rows.jsp"> <put-list-attribute name="items"> <add-attribute value="/tiles/banner.jsp" /> <add-attribute value="/tiles/common_menu.jsp" /> <add-attribute value="/tiles/credits.jsp" /> </put-list-attribute> </definition>
In your template page, you can read the list attribute iterating over its elements:
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %> <tiles:useAttribute id="list" name="items" classname="java.util.List" /> <c:forEach var="item" items="${list}"> <tiles:insertAttribute value="${item}" flush="true" /> <br/> </c:forEach>
The list attribute is first converted into a scripting variable; after that it is iterated using the <c:forEach> tag. The compound attributes are then rendered one after the other.