blob: a6a58e83f355312d6b806c245edbbb290dc02b58 [file] [log] [blame]
~~ $Id$
~~
~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements. See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership. The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License. You may obtain a copy of the License at
~~
~~ http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied. See the License for the
~~ specific language governing permissions and limitations
~~ under the License.
~~
-----------
List Attributes
-----------
List Attributes
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.
* Simple usage
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://tiles.apache.org/tags-tiles-extras" prefix="tilesx" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<tilesx: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.
* {List attribute inheritance}
When you extend a definition that contains a list attribute, you can
"inherit" its elements. For example:
---------------------------------------
<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>
<definition name="myapp.homepage.body.extended" extends="myapp.homepage.body">
<put-list-attribute name="items" inherit="true">
<add-attribute value="/tiles/greetings.jsp" />
</put-list-attribute>
</definition>
---------------------------------------
In this case, the <<<myapp.homepage.body.extended>>> has the <<<items>>>
attribute that inherits the content of the <<<items>>> attribute of its
parent definition. In other words, the <<<items>>> attribute will container
the following elements:
* /tiles/banner.jsp
* /tiles/common_menu.jsp
* /tiles/credits.jsp
* /tiles/greetings.jsp