You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Bill Schneider <bs...@vecna.com> on 2004/08/19 18:14:40 UTC

Tiles: multiple layers of layout

I'm trying to do something with Tiles like this:

<definition name=".mainLayout" page="/tiles/mainLayout.jsp">
   <put name="header" value="/tiles/header.jsp">
   <put name="footer" value="/tiles/footer.jsp">
   <put name="title" value="${title}"/>
   <put name="body" value="${body}"/>
</definition>

<definition name=".nestedLayout" extends=".mainLayout">
   <put name="body" value="/tiles/nestedLayout.jsp"/>
   <put name="nestedBody" value="${nestedBody}"/>
</definition>

<definition name=".nested1" extends=".nestedLayout">
   <put name="title" value="nested page"/>
   <put name="nestedBody" value="/tiles/nested1.jsp"/>
</definition>

When ".nested1" is displayed, I see the main layout as expected, with 
the proper title; and nestedLayout.jsp gets included as the body.  But 
inside nestedLayout.jsp, <tiles:get name="nestedBody"/> doesn't work.

I could always do something in mainLayout.jsp like
<tiles:importAttribute/>
<tiles:insert name="body">
   // foreach imported attribute {
     <tiles:put name="[attr name]" value="[attr value]"/>
   // }
</tiles:insert>

This works but doesn't feel right.  Is there a better way to export 
attributes or otherwise preserve the current Tiles context through a 
tiles:insert or tiles:get?

-- Bill
-- 
Bill Schneider
Chief Architect

Vecna Technologies
5004 Lehigh Rd., Suite B
College Park, MD 20740
bschneider@vecna.com
t: 301-864-7253 x1140
f: 301-699-3180


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Tiles: multiple layers of layout

Posted by Michael McGrady <mi...@michaelmcgrady.com>.
Michael McGrady wrote:

> Bill Schneider wrote:
>
>> I'm trying to do something with Tiles like this:
>>
>> <definition name=".mainLayout" page="/tiles/mainLayout.jsp">
>>   <put name="header" value="/tiles/header.jsp">
>>   <put name="footer" value="/tiles/footer.jsp">
>>   <put name="title" value="${title}"/>
>>   <put name="body" value="${body}"/>
>> </definition>
>>
>> <definition name=".nestedLayout" extends=".mainLayout">
>>   <put name="body" value="/tiles/nestedLayout.jsp"/>
>>   <put name="nestedBody" value="${nestedBody}"/>
>> </definition>
>>
>> <definition name=".nested1" extends=".nestedLayout">
>>   <put name="title" value="nested page"/>
>>   <put name="nestedBody" value="/tiles/nested1.jsp"/>
>> </definition>
>>
> I am not sure what is going on here, Bill, but it looks like you mean 
> to have something like the following?
>
> <definition name=".mainLayout" page="/tiles/mainLayout.jsp">
>  <put name="header" value="/tiles/header.jsp">
>  <put name="footer" value="/tiles/footer.jsp">
>  <put name="title" value="${title}"/>
>  <put name="body" value="${body}"/>
> </definition>
>
> <definition name=".nestedLayout" extends=".mainLayout">
>  <put name="body" value="/tiles/nestedLayout.jsp"/>
>  <put name="body" value="${nestedBody}"/>
> </definition>
>
> That is, it looks like you want to override rather than extend the 
> definition?  Is that right?
>
> Michael 


Oops!  I meant:

<definition name=".nestedLayout" extends=".mainLayout">
 <put name="body" value="${nestedBody}"/>
</definition>




---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Tiles: multiple layers of layout

Posted by Michael McGrady <mi...@michaelmcgrady.com>.
Bill Schneider wrote:

> I'm trying to do something with Tiles like this:
>
> <definition name=".mainLayout" page="/tiles/mainLayout.jsp">
>   <put name="header" value="/tiles/header.jsp">
>   <put name="footer" value="/tiles/footer.jsp">
>   <put name="title" value="${title}"/>
>   <put name="body" value="${body}"/>
> </definition>
>
> <definition name=".nestedLayout" extends=".mainLayout">
>   <put name="body" value="/tiles/nestedLayout.jsp"/>
>   <put name="nestedBody" value="${nestedBody}"/>
> </definition>
>
> <definition name=".nested1" extends=".nestedLayout">
>   <put name="title" value="nested page"/>
>   <put name="nestedBody" value="/tiles/nested1.jsp"/>
> </definition>
>
I am not sure what is going on here, Bill, but it looks like you mean to 
have something like the following?

<definition name=".mainLayout" page="/tiles/mainLayout.jsp">
  <put name="header" value="/tiles/header.jsp">
  <put name="footer" value="/tiles/footer.jsp">
  <put name="title" value="${title}"/>
  <put name="body" value="${body}"/>
</definition>

<definition name=".nestedLayout" extends=".mainLayout">
  <put name="body" value="/tiles/nestedLayout.jsp"/>
  <put name="body" value="${nestedBody}"/>
</definition>

That is, it looks like you want to override rather than extend the 
definition?  Is that right?

Michael


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org