OK, I see:
Your definition would need to extend .sublayout..
/layout/layout
/layout/layout2
<definition name=".base" page="/layout/layout.jsp">
<put name="section1" page="menu.jsp">
<put name="section2" page=".myEndUserPage.page1">
</definition>
<definition name=".anotherPage" page=".base">
<put name="section2" page=".myEndUserPage.page2">
</definition>
<Definition name=".sublayout" page="/layout/layout2.jsp">
<put name="head" page="xyz.jsp">
<put name="body" page="123.jsp">
</definition>
<definition name=".myEndUserPage.page1" extends=".sublayout">
<put name="body" value="/myEndUserPage.jsp"/>
</definition>
<definition name=".myEndUserPage.page2" extends=".sublayout">
<put name="body" value="/another.jsp"/>
</definition>
Daniel Hannum <[EMAIL PROTECTED]>
08/15/2005 03:51 PM
|
|
This still isn't working for me. I need to tweak your example because the
value of "body" changes for each page. So if I add one more definition to my
tiles-config.xml for an actual end-user page that a user would point a
browser to:
<definition name="/myEndUserPage.tiles" extends=".base">
<put name="body" value="/myEndUserPage.jsp"/>
</definition>
It's not clear which of your definitions I should extend. If I extend .base
(the logical choice), I get the same behavior where the layout.jsp is
rendered and layout2.jsp is substituted in, but no substitutions are made
inside the layout2.jsp. If I extend .sublayout, I get even weirder behavior
where it appears to render layout2.jsp but makes no substitutions at all.
I looked at the Tiles examples and they don't seem to define individual
pages in the tiles-config.xml, as I did above. Could that be my problem?
Dan
On 8/15/05, [EMAIL PROTECTED] <
[EMAIL PROTECTED]> wrote:
>
> Yes, this can be done. The VBox example is a good example of this.
>
> Basically it is laid out as follows.
>
> /layout/layout
> /layout/layout2
>
> <definition name=".base" page="/layout/layout.jsp">
> <put name="section1" page="menu.jsp">
> <put name="section2" page=".sublayout">
> </definition>
>
> <Definition name=".sublayout" page="/layout/layout2.jsp">
> <put name="head" page="xyz.jsp">
> <put name="body" page="123.jsp">
> </definition>
>
> you can then substitute out different components of each section based on
> what you are doing.
>
>
>
>
> [image: Inactive hide details for Daniel Hannum <[EMAIL PROTECTED]>]Daniel
> Hannum <[EMAIL PROTECTED]>
>
>
>
> *Daniel Hannum <[EMAIL PROTECTED]>*
>
> 08/15/2005 02:18 PM Please respond to
> "Struts Users Mailing List" <
> user@struts.apache.org>
>
>
> To
>
> user@struts.apache.org
> cc
>
>
> Subject
>
> Can nested tile layouts be done?
> Hi everyone, I have a question about nesting layouts with Struts
> tiles. I've seen this sort of thing discussed in the past, but in
> searching I didn't see an example that I could apply to my situation,
> nor did I see a good solution.
>
> Executive summary:
>
> What I want to do is have a simple layout containing two tiles, both
> of which are JSP's. However, one of those JSP's is actually another
> layout JSP, which itself contains tile placeholders. I can get Struts
> Tiles to do the substitutions for the first layout, but it seems to
> treat my second layout as a simple JSP and does not do further tiles
> substitutions in the second layout.
>
> Detailed description:
>
> We have two separate applications that share a common track bar at the
> top of the screen. Beyond that they are completely separate. So, we
> have a layout containing "trackbar" and "trackcontent". Trackbar is a
> common jsp as you can see below. Trackcontent is simply a blackbox
> representing the rest of the app.
>
> <definition name=".base" page="/layout/layout.jsp">
> <put name="trackbar" value="/common/trackbar.jsp"/>
> </definition>
>
> Then I made two definitions that put in the appropriate subsititution
> for trackcontent. *BUT* note that both of those JSP's have their own
> Tiles placeholders called "menu" and "body". It's necessary to do this
> because the apps may have different layouts but they must share the
> trackbar above.
>
> <definition name=".app1base" extends=".base">
> <put name="trackcontent" value="/layout/app1Layout.jsp"/>
> </definition>
>
> <definition name=".app2base" extends=".base">
> <put name="trackcontent" value="/layout/app2Layout.jsp"/>
> </definition>
>
> Then, since all the pages of a single app share an app-specific menu,
> I made another definition put the right page in for "menu"
>
> <definition name=".app1" extends=".app1base">
> <put name="menu" value="/common/app1NavBar.jsp"/>
> </definition>
>
> <definition name=".app2" extends=".app2base">
> <put name="menu" value="/common/app2NavBar.jsp"/>
> </definition>
>
> Lastly, we have two actual pages that extend the app definitions and
> put the right values in for "body"
>
> <definition name="/app1page1.tiles" extends=".app1">
> <put name="body" value="/app1page1.jsp"/>
> </definition>
>
> <definition name="/app2page1.tiles" extends=".app2">
> <put name="body" value="/app2page1.jsp"/>
> </definition>
>
> Now, when I put all this together and point my browser at, say,
> app1page1, I get the top-level layout and the trackbar rendered, and
> it renders the appropriate trackcontent for app1, but it does NOT do
> the second level of substitutions (i.e. substitute the correct menu
> and body)
>
> Is Struts capable of doing this sort of two-level layout indirection?
> If so, how should I change my tile defs and layouts to make it work.
>
> Thanks a lot!
> Dan
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>