Hello Lukasz,
   You need to add an attribute cascade=true to the attribute that needs to
be inherited.

JL

2015-11-27 7:01 GMT-05:00 Lukasz Lenart <[email protected]>:

> 2015-11-27 12:45 GMT+01:00 Lukasz Lenart <[email protected]>:
> > The problem is with AttributeContext and ArrayStack. When evaluating
> > ftl file I see three AttributeContexts - empty,
> > with-attributes-from-tiles.xml, empty - and the last empty is used to
> > evaluate the ftl :\
> >
> > In BasicTilesContainer method render() looks like this
> >
> > protected void render(TilesRequestContext request, Definition
> definition) {
> >     AttributeContext originalContext = getAttributeContext(request);
> >     BasicAttributeContext subContext = new
> > BasicAttributeContext(originalContext);
> >     subContext.inherit(definition);
> >
> >     pushContext(subContext, request);
> >
> >     try {
> >         render(request, subContext);
> >     } finally {
> >         popContext(request);
> >     }
> > }
> >
> > the first line will create an empty AttributeContext and will push to
> > the stack - why? Then the proper AttributeContext will be created and
> > pushed again (with values from tiles.xml). I cannot figure out where
> > the third ActionContext is created.
>
> I think I understand - AttributeContext is created per a tile (ie.
> /tiles/layout.jsp, /tiles/menu.jsp, etc) and it isn't possible to use
> it outside of the tile - which looks like a bug to me :)
>
> I have a very simple tiles.xml:
>
> <tiles-definitions>
>
>     <definition name="baseLayout" template="/tiles/layout.jsp">
>         <put-attribute name="title" value="Template"/>
>         <put-attribute name="header" value="/tiles/header.jsp"/>
>         <put-attribute name="menu" value="/tiles/menu.jsp"/>
>         <put-attribute name="body" value="/tiles/body.jsp"/>
>         <put-attribute name="footer" value="/tiles/footer.ftl"/>
>     </definition>
>
>     <definition name="hello" extends="baseLayout">
>         <put-attribute name="title" value="Hello"/>
>         <put-attribute name="body" value="/example/HelloWorld.jsp"/>
>     </definition>
>
> </tiles-definitions>
>
> and now an attribute "title" is only accessible inside "layout.jsp",
> it won't be accessible in header.jsp, menu.jsp and so on as for each
> of this tile a new empty AttributeContext is created. I would assume
> that the attributes will be inherited in that case, but they aren't.
>
> I have tested this by simply adding <tiles:insertAttribute
> name="title"/> tag to menu.jsp and got exception:
> org.apache.tiles.template.NoSuchAttributeException: Attribute 'title'
> not found
>
> How can I tell Tiles to inherit attributes?
>
>
> Regards
> --
> Ɓukasz
> + 48 606 323 122 http://www.lenart.org.pl/
>

Reply via email to