blob: 654d61eed1729c874b5ac5cce2a39992623b4cb7 [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.
~~
-----------
Tiles Concepts
-----------
Tiles concepts
Tiles is an implementation of the {{{../pattern.html}Composite View pattern}}.
Tiles adds to this pattern its own concepts to make the pattern concrete. The
implementation of Tiles around the <Composite View> pattern consists of the
{{{./concepts.html#Template}Template}}, {{{./concepts.html#Attribute}Attribute}}
and {{{./concepts.html#Definition}Definition}} concepts. The <View Helper>
pattern is implemented by the {{{./concepts.html#View Preparer}View Preparer}}
concept.
* {Template}
In Tiles, a <<template>> is the layout part of a page. You can see as a page
structure with some gaps, called <<attributes>>, to be filled.
For instance, consider the "classic layout" page structure.
[../../images/tiled_page.png] The "classic layout", a typical structure of a web
page.
You can replicate this structure by creating a JSP page, as you can see below.
-------------------------------
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<table>
<tr>
<td colspan="2">
<tiles:insertAttribute name="header" />
</td>
</tr>
<tr>
<td>
<tiles:insertAttribute name="menu" />
</td>
<td>
<tiles:insertAttribute name="body" />
</td>
</tr>
<tr>
<td colspan="2">
<tiles:insertAttribute name="footer" />
</td>
</tr>
</table>
-------------------------------
Notice that a template <<can have no attributes>>: in this case it can be used
directly.
* {Attribute}
An <<attribute>> is a gap in a template that needs to be filled in your
application. An attribute can be of three types:
* <<string>>: it is a string to be directly rendered as it is.
* <<template>>: it is a template, with or without attributes. If it has
attributes, you have to fill them too to render a page.
* <<definition>>: it is a reusable composed page, with all (or some)
attributes filled (see below).
* {Definition}
A <<definition>> is a composition to be rendered to the end user; essentially
a definition is composed of a <<template>> and completely or partially
<<filled attributes>>.
* If <<all>> of its attributes are filled, it can be rendered to the end user.
* If <<not all>> of its attributes are filled, it is called an <<abstract
definition>>, and it can be used as a base definition for extended
definitions, or their missing attributes can be filled at runtime.
[]
For example, you can create a page using the <classic layout> as seen before,
by modifying the {{{./pages.html}Tiles configuration file}}.
------------------------------------
<definition name="myapp.homepage" template="/layouts/classic.jsp">
<put-attribute name="header" value="/tiles/banner.jsp" />
<put-attribute name="menu" value="/tiles/common_menu.jsp" />
<put-attribute name="body" value="/tiles/home_body.jsp" />
<put-attribute name="footer" value="/tiles/credits.jsp" />
</definition>
------------------------------------
* {View Preparer}
Sometimes a definition, before it is rendered, needs to be "prepared". For
example when showing a menu, the menu structure must be created and stored
in the request scope.
For this reason, a <<View Preparer>> can be used: it is called <<before>> the
definition is rendered, so all the things needed to render correctly the
definition can be prepared.
See the {{{../advanced/preparer.html}Tiles View Preparer configuration}} for
more information.