On Mon, Oct 12, 2009 at 12:38 PM, excurser <[email protected]> wrote:
> On Mon, Oct 12, 2009 at 10:42 AM, Antonio Petrelli
> <[email protected]> wrote:
>>
>> 2009/10/12 Johannes Kuhs <[email protected]>
>>
>> > I was wondering if there is a way to inherit the value of an attribute and
>> > to extend it with new content. Basically, I’m looking for something like
>> > inherit=”true” for list-attributes but for normal attributes.
>> >
>> > Following is a quick example of what I would like to do:
>> >
>> > Initialization in /WEB-INF/tiles-defs.xml:
>> >
>> > <definition name=" test.definition" template="/layouts/classic.jsp">
>> >    <put-attribute name="title" value="Initial title value" />
>> > </definition>
>> >
>> > Inherit and extend in /test.jsp, note inherit=”true” in the <putAttribute>
>> > tag (which does not work but I think it shows what I want to achieve):
>> >
>> > <tiles:insertDefinition name="test.definition">
>> >  <tiles:putAttribute name="title" inherit=”true”>
>> >      --This text gets appended to the initial value of the title attribute
>> >  </tiles:putAttribute>
>> > </tiles:insertDefinition>
>> >
>> > Now, when inserting the attribute with the following code:
>> >
>> > <tiles:insertAttribute name="title"/>
>> >
>> > The following title should be displayed:
>> > Initial title value--This text gets appended to the initial value of the
>> > title attribute
>> >
>>
>>
>> You can do it with a preparer. For example, add an "auxiliar" attribute in
>> which you put the text to add, something like:
>>
>> <tiles:insertDefinition name="test.definition"
>> preparer="my.package.MyPreparer">
>>  <tiles:putAttribute name="title-aux">
>>     --This text gets appended to the initial value of the title attribute
>>  </tiles:putAttribute>
>> </tiles:insertDefinition>
>>
>> And in your preparer:
>>
>> public void execute(TilesRequestContext tilesContext,
>>            AttributeContext attributeContext) {
>>        String auxValue =
>> attributeContext.getAttribute("title-aux").getValue().toString();
>>        String originalTitle =
>> attributeContext.getAttribute("title").getValue().toString();
>>        attributeContext.putAttribute("title", new Attribute(originalTitle +
>> auxValue, null);
>>    }
>>
>> HTH
>> Antonio
>
> Thanks for your reply, Antonio! I guess the preparer solution would
> work but I would have to create a new preparer for every attribute
> that I want to inherit/extend. Is there a way to have a general
> preparer that I pass the attribute in question and the value to append
> to?
>
> Thanks,
> John
>

Following up on this. I wrote a preparer class that I can reuse for
various attributes. However, so far I can only extend attributes that
have a string value associated with them. If an attribute links to a
file (e.g. /header.jsp) the the preparer adds the aux value to the
file name instead of the actual content in the file resulting in
something like:

/header.jsp--appended text here

This of course results in an error because there is not file called
"/header.jsp--appended text here". I guess the header attribute
content needs to be evaluated before adding the aux value. Is this
possible within the preparer class?

Thanks!

Reply via email to