Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Most often, an application may just need to override a template (see Template Loading) so that a certain control renders differently. Or, an application may need to add a new template to an existing theme. Other times, you might want to create an entirely new theme, perhaps because you are building a rich set of unique and reusable templates for your organization.

...

Code Block
xml
xml
titleWrapping a control

<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader.ftl" />
<#include "/${parameters.templateDir}/simple/xxx.ftl" />
<#include "/${parameters.templateDir}/${parameters.expandTheme}/controlfooter.ftl" />

...

Code Block
title/template/ajax/theme.properties

parent = xhtml

An extended theme does not need to implement every single template that the Struts Tags expect. It only needs to implement the templates that change. The other templates are loaded from the parent template.

...

UIBean provides few special parameters which can be used to build a new template (they are already used in xhtml and css_xhtml theme):

  • templateDir - current value of templateDir parameter, see Selecting Template Directory
  • theme - used theme, see Selecting Themes
  • template - name of the template file to use (i.e. text)
  • themeExpansionToken - special token used to indicate to search for a template also in parent theme (when used with <#include /> directive)
  • expandTheme - tells internal template loader mechanism to try load template from current theme and then from parent theme (and parent theme, and so on)

Using expandTheme parameter allows to override only some parts of the theme's templates, e.g. css.ftl. You can define a new theme (set theme.properties) and override just single file.

${parameters.expandTheme} is a recurrence which tells ThemeManager to load template from current theme and then from parent theme (defined in theme.properties) and so on.

Please also notice that the ThemeManager builds list of possible templates based on current theme and inherited themes (/template/custom/textarea.ftl, /template/xhtml/textarea.ftl, /template/simple/textarea.ftl). This is also true for templates which are loaded via ${parameters.expandTheme}.

(tick) See also example Struts 2 Themes or Creating a Theme in Struts 2 (Mark Menard)