After playing with it some more, I figured out the answer to my question. :-)
The trick was to use the "clay" component (or a component derived from "clay")
and pass the configurable parts to the "clayJsfid" attribute (instead of trying
to pass them as part of the "jsfid" attribute directly), like so:
In my JSP:
<f:loadBundle basename="runtime" var="runtime" />
<c:clay
id="testPage"
jsfid="templateTestPage"
>
<c:symbol name="pageTitle" value="Test of template" />
<c:symbol name="templatesPrefix" value="#{runtime.templatesPrefix}" />
<c:symbol name="themeName" value="#{runtime.themeName}" />
</c:clay>
In my clay-config.xml:
<component jsfid="basePage" extends="clay">
<attributes>
<set name="clayJsfid"
value="@templatesPrefix/@themeName/html.html" />
</attributes>
</component>
<component jsfid="templateTestPage" extends="basePage">
<symbols>
<set name="bodyTemplate"
value="@templatesPrefix/@themeName/bodyTemplate.html" />
</symbols>
</component>
In this case, I'm using a message bundle named runtime.properties to pass in
the theme name, but presumably, one could use a managed bean in the same way to
obtain the theme name from user preferences.
Rich Eggert
Member of Technical Staff
Proteus Technologies, LLC
http://www.proteus-technologies.com
-----Original Message-----
From: Richard Eggert [mailto:[EMAIL PROTECTED]
Sent: Sat 2/17/2007 3:53 PM
To: [email protected]
Subject: Dynamically-selectable HTML templates
In an application I'm working on, I'm trying to implement a mechanism by which
the exact HTML template file that is used for a given page is dependent upon a
configurable (at a minimum, by the person deploying the application, but
ideally, in the profile of each user) parameter such that although the actual
information displayed by a given page remains the same, the layout and
formatting of the page may vary according to the site "theme" selected by the
site owner and/or user preferences. After doing some experimenting, I
discovered that expressions are not allowed in the jsfid attribute of the
"clay" JSP tag. Is there some other way of implementing this? Is what I'm
trying to do even feasible with Clay?
Rich Eggert
Member of Technical Staff
Proteus Technologies, LLC
http://www.proteus-technologies.com