14.4 The Tiles Tag Library
This
section introduces the JSP custom tags used by the Tiles framework. Table 14-1 lists the tags available to the
framework. The tags are very similar to the ones provided in any template-based
framework, but Tiles contains more functionality.
Table 14-1. Tags within the Tiles
tag library
|
Tag name
|
Description
|
add
|
Add an element to the surrounding list.
|
definition
|
Create a tile component definition.
|
get
|
Get the content from request scope that was put there by a put tag.
|
getAsString
|
Render the value of the specified tile/component/template attribute
to the current JspWriter.
|
importAttribute
|
Import a tile's attribute into the specified context.
|
initComponentDefinitions
|
Initialize a tile definitions factory.
|
insert
|
Insert a tiles component.
|
put
|
Put an attribute into a tile context.
|
putList
|
Declare a list that will be passed as an attribute.
|
useAttribute
|
Use an attribute value inside a page.
|
14.4.1 The insert Tag
The insert tag is
responsible for inserting content into a page. In a layout tile, the insert tag prescribes where the content
will go using attribute values. In a regular, non-layout tile, the insert tag is used to retrieve a layout
and allow content to be passed to the layout using put tags. Table 14-2 lists the attributes for the insert tag.
Table 14-2. Attributes for the
insert tag
|
Attribute name
|
Description
|
attribute
|
The name of an attribute in the current tile/component
context. The value of this attribute is passed to the name attribute.
|
beanName
|
The name of the bean used as a value. The bean is retrieved
from the specified context, if any. Otherwise, the pageContext.findAttribute( ) method is
used. If the beanProperty
attribute is also specified, retrieve the value from the corresponding bean
property.
If the bean (or bean property value) is an instance of one
of the Attribute classes (Direct, Instance,
etc.), the insertion is done according to the class type. Otherwise, the toString( ) method is called on the
bean, and the returned String
is passed to the name
attribute.
|
beanProperty
|
The name of the bean property. If specified, the value is
retrieved from this property.
|
beanScope
|
The context scope the bean can be found within. If not
specified, the pageContext.findAttribute(
)method is used. The scope can be any JSP scope, component, or
template. In the two latter cases, the bean is searched in the
tile/component/template context.
|
component
|
A string representing the URI of a tile or template. The template, page, and component
attributes have exactly the same behavior.
|
controllerUrl
|
The URL of a controller called immediately before the page
is inserted. The URL usually denotes a Struts action. The controller (action)
is used to prepare data to be rendered by the inserted tile.
Only one of controllerUrl
or controllerClass should be
used.
|
controllerClass
|
The class type of a controller called immediately before the
page is inserted. The controller is used to prepare data to be rendered by
the inserted tile.
Only one of controllerUrl
or controllerClass should be
used. The class must implement or extend one of the following: org.apache.struts.tiles.Controller, org.apache.struts.tiles.ControllerSupport,
or org.apache.struts.action.Action.
|
definition
|
The name of the definition to insert. Definitions are
defined in a centralized file. For now, only definitions from a factory can
be inserted with this attribute. To insert a definition defined with the definition tag, use beanName="".
|
flush
|
true or false. If true, the current page output stream is flushed before
tile insertion.
|
ignore
|
If this attribute is set to true
and the attribute specified by the name
does not exist, simply return without writing anything. The default value is false, which will cause a runtime
exception to be thrown.
|
name
|
The name of an entity to insert. The search is done in this
order: definition, attribute, then page.
|
page
|
A string representing the URI of a tile or template. The template, page, and component
attributes have exactly the same behavior.
|
role
|
If the user is in the specified role, the tag is taken into
account; otherwise, the tag is skipped and the content is not written out.
|
template
|
A string representing the URI of a tile or template. The template, page, and component
attributes have exactly the same behavior.
|
Several examples of the insert
tag were shown earlier in this chapter.
14.4.2 The definition Tag
The definition tag is
used to create a tile (template) definition as a bean. The newly created bean
will be saved under the specified id,
in the requested scope. The definition tag has the same syntax as the insert tag. The new definition can extend
a definition described in the definition factory (XML file) and may overload
any previously defined parameters. Table 14-3 lists the attributes supported by
the definition tag.
Table 14-3. Attributes for the
definition tag
|
Attribute name
|
Description
|
extends
|
The name of a parent definition that is used to initialize
this new definition.The parent definition is searched in the definitions
factory.
|
id
|
The name under which the newly created definition bean will
be saved. This attribute is required.
|
page
|
URL of the template/component to insert. Same as template.
|
role
|
The role to check before inserting this definition. If the
role is not defined for the current user, the definition is not inserted.
Checking is done at insertion time, not during the definition process.
|
scope
|
The variable scope in which the newly defined bean will be
created. If not specified, the bean will be created in page scope.
|
template
|
A string representing the URL of a tile/component/template
(a JSP page).
|
The following fragment illustrates how to use the definition tag in a JSP page:
<tiles:definition
id="storefront.default"
page="/layouts/storefrontDefaultLayout.jsp"
scope="request">
<tiles:put name="header" value="/common/header.jsp" />
<tiles:put name="menubar" value="/common/menubar.jsp" />
<tiles:put name="copyright" value="/common/copyright.jsp" />
</tiles:definition>
A complete example is shown later, in Section 14.5.1 of this chapter.
14.4.3 The put Tag
The put tag is
used to pass attributes to a tile component. This tag can be used only inside
the insert or definition tags. The value (or content) of
the put tag is specified using
the value attribute or the tag
body. It is also possible to specify the type of the value:
string
Content is literally translated.
page or template
Content is included from specified
URL. Name is used as URL.
definition
Content comes from specified
definition (from factory). Name is used as definition name.
If the type
attribute is used, it is taken into account by the get or insert
tags inside the inserted tile. If the type
attribute is not specified, the content is untyped,
unless it comes from a typed bean.
|
Setting direct="true"
is equivalent to setting type="string".
|
|
Table 14-4 lists the attributes for the put tag.
Table 14-4. Attributes for the put
tag
|
Attribute name
|
Description
|
beanName
|
The name of the bean used to retrieve the value. The bean is
retrieved from the specified context, if any. Otherwise, the pageContext.findAttribute( )method is
used. If beanProperty is
specified, retrieve the value from the corresponding bean property.
|
beanProperty
|
The property name in the bean. If specified, the value is
retrieved from this property.
|
beanScope
|
The scope used to search for the bean. If not specified, the
pageContext.findAttribute( )
method is used. The scope can be any JSP scope, "tile",
"component", or "template". In the three later cases, the
bean is searched in the tile/component/template context.
|
content
|
Content that's put into tile scope. This attribute is
equivalent to the value
attribute and was added for compatibility with the JSP template tags.
|
direct
|
How the content is handled: true
means content is printed directly; false
means content is included. false
is the default. This is another way to specify content type. If direct="true", content is
"string"; if direct="false",
content is "page". This attribute was added for compatibility with
the JSP template tags.
|
name
|
The name of the attribute.
|
role
|
If the user is in the specified role, the tag is taken into
account. Otherwise, the tag is skipped and the content is not written out.
|
type
|
The content type. Valid values are "string",
"page", "template", or "definition".
|
value
|
The attribute value—can be a String or an Object.
The value can come from a direct assignment (value="aValue")
or from a bean. One of value, content, or beanName must be present.
|
14.4.4 The putList Tag
The putList tag
creates a list that will be passed as an attribute to a tile. The list elements
are added using the add tag.
This tag can be used only inside the insert
or definition tag. Table 14-5 lists the attribute for the putList tag.
Table 14-5. Attribute for the
putList tag
|
Attribute name
|
Description
|
name
|
The name of the List. This attribute is required.
|
14.4.5 The add Tag
The add tag adds
an element to the surrounding list. This tag can be used only inside the putList tag. The value can come from a
direct assignment (value="aValue")
or from a bean. One of value or beanName must be specified. Table 14-6 lists the attributes for the add tag.
Table 14-6. Attributes for the add
tag
|
Attribute name
|
Description
|
beanName
|
The name of the bean used to retrieve the value. The bean is
retrieved from the specified context, if any. Otherwise, the pageContext.findAttribute( ) method is
used. If beanProperty is
specified, retrieve the value from the corresponding bean property.
|
beanProperty
|
The bean property name. If specified, the value is retrieved
from this property.
|
beanScope
|
The scope used to search for the bean. If not specified, the
pageContext.findAttribute( )
method is used. The scope can be any JSP scope, "component", or
"template". In the two latter cases, the bean is searched in the
tile/component/template context.
|
content
|
The value is the same as the value attribute. This attribute was added for
compatibility with the JSP template tags.
|
direct
|
How the content is handled: true
means content is printed directly; false
means content is included. false
is the default.
|
role
|
If the user is in the specified role, the tag is taken into account;
otherwise, the tag is ignored (skipped). The role isn't taken into account if
the add tag is used in a
definition.
|
type
|
The content type: "string", "page",
"template", or "definition". If the type attribute is not specified, content
is untyped, unless it comes from a typed
bean.
|
value
|
The value to be added. Can be a String or Object.
|
14.4.6 The get Tag
The get tag
retrieves content from the tile context and includes it in the page. Table 14-7 lists the attributes for the get tag.
Table 14-7. Attributes for the get
tag
|
Attribute name
|
Description
|
flush
|
true or false. If true, the current page output stream is flushed before
tile insertion.
|
ignore
|
If this attribute is set to true
and the attribute specified by the name does not exist, simply return without
writing anything. The default value is false,
which will cause a runtime exception to be thrown.
|
name
|
The name of the content to get from the tile scope. This
attribute is required.
|
role
|
If the user is in the specified role, the tag is taken into
account; otherwise, the tag is ignored.
|
14.4.7 The getAsString Tag
The getAsString tag
retrieves the value of the specified tile attribute property and renders it to
the current JspWriter as a String.
The usual toString( ) conversion
is applied to the value. If the named value is not found, a JSPException will be thrown. Table 14-8 lists the attributes for the getAsString tag.
Table 14-8. Attributes for the
getAsString tag
|
Attribute name
|
Description
|
ignore
|
If this attribute is set to true
and the attribute specified by the name does not exist, simply return without
writing anything. The default value is false,
which will cause a runtime exception to be thrown.
|
name
|
The attribute name. This attribute is required.
|
role
|
If the user is in the specified role, the tag is taken into
account; otherwise, the tag is ignored.
|
14.4.8 The useAttribute Tag
The useAttribute tag
declares a Java variable and an attribute in the specified scope, using the
tile's attribute value. The variable and attribute will have the name specified
by id, or the original name if
not specified. Table 14-9 lists the attributes for the useAttribute tag.
Table 14-9. Attributes for the
useAttribute tag
|
Attribute name
|
Description
|
classname
|
The class of the declared variable.
|
id
|
The declared attribute and variable name.
|
ignore
|
If this attribute is set to true
and the attribute specified by the name does not exist, simply return without
error. The default value is false,
which will cause a runtime exception to be thrown.
|
name
|
The tile's attribute name. This attribute is required.
|
scope
|
The scope of the declared attribute. Defaults to
"page".
|
14.4.9 The importAttribute Tag
The importAttribute tag
imports the attribute from the tile to the requested scope. The name and scope
attributes are optional. If not specified, all tile attributes are imported in
page scope. Once imported, an attribute can be used like any other bean from
the JSP context. Table 14-10 lists the attributes for the importAttribute tag.
Table 14-10. Attributes for the
importAttribute tag
|
Attribute name
|
Description
|
ignore
|
If this attribute is set to true
and the attribute specified by the name does not exist, simply return without
error. The default value is false,
which will cause a runtime exception to be thrown.
|
name
|
The tile's attribute name. If not specified, all attributes
are imported.
|
scope
|
The scope into which the attribute is imported. Defaults to
"page".
|
14.4.10 The initComponentDefinitions Tag
The initComponentDefinitions tag
initializes the definitions factory. Table 14-11 lists the attributes for the tag.
Table 14-11. Attributes for the
initComponentDefinitions tag
|
Attribute name
|
Description
|
classname
|
If specified, the classname
attribute of the factory to create and initialize.
|
file
|
The definition file's name. This attribute is required .
|