Fork me on GitHub

Reusing old Tiles configuration files

With Tiles 2.1 and 2.2 it is possible to use old Struts-Tiles definition files, since 1.1 version.

To use this feature it is needed to:

  • include the tiles-compat-xxx.jar package in the classpath;
  • configure the compatibility definitions reader instance, that is able to read old definition files.

Configuration

Override the createDefinitionsReader method this way:

@Override
protected DefinitionsReader createDefinitionsReader(Object context,
        TilesApplicationContext applicationContext,
        TilesRequestContextFactory contextFactory) {
    return new CompatibilityDigesterDefinitionsReader();
}

You need to add a renderer for the "page" attribute type, that is in fact the "template" type. So override the registerAttributeRenderers method.

@Override
protected void registerAttributeRenderers(
        BasicRendererFactory rendererFactory, Object context,
        TilesApplicationContext applicationContext,
        TilesRequestContextFactory contextFactory, TilesContainer container,
        AttributeEvaluator evaluator) {
    super.registerAttributeRenderers(rendererFactory, context,
            applicationContext, contextFactory, container, evaluator);
    TemplateAttributeRenderer templateRenderer = new TemplateAttributeRenderer();
    templateRenderer.setApplicationContext(applicationContext);
    templateRenderer.setRequestContextFactory(contextFactory);
    templateRenderer.setEvaluator(evaluator);
    rendererFactory.registerRenderer("page", templateRenderer);
}

WARNING!!! Configuration with initialization parameter has been deprecated! If you still want to use it, please refer to the 2.1 version of this page.

Tiles configuration files translation

A better, and more powerful, choice is to rewrite the definition files, to use the new features of Tiles 2.1.

Most of XML elements and attributes can be translated one-to-one or many-to-one without losing functionality from the 1.1-1.3 to the 2.1 DTD version.

Header

The new header to be put in your Tiles definitions files is:

 <!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">

Definitions attributes

Struts-Tiles Apache Tiles™
<component-definitions> <tiles-definitions> <tiles-definitions>
page path template template
controllerClass controllerUrl preparer [1]
  • [1] The default behaviour of preparer is to create and use a single instance of the specified class. Anyway it is still possible to use a URL as a preparer under a Struts 1 environment by using the Struts 1 - Apache Tiles™ integration module, still under development.

Putting and adding attributes values

The page attribute type has been removed, use template instead.

The rest of the conversion is in the table below.

Struts-Tiles Apache Tiles™
<put> <put-attribute>
<putList> <put-list-attribute>
<add> <add-attribute> [2] <add-list-attribute> [3]
content value value
direct="true" type="string"
  • [2] <add-attribute> is used when it is needed to add a single attribute to a list attribute.
  • [3] <add-list-attribute> is used when it is needed to a list attribute as an element of another list attribute.