I'm trying to create a nested layout structure using the Stripes layout tags,
and am running into a problem.

My goal is to have the following:
1. A master layout definition (layout.jsp) that defines the main layout (header,
body, footer). Here, the header, and footer contents are given default values. 
2. A sub-layout definition (layoutWithMenu.jsp) extends layout.jsp, and
decorates the body content by adding a menu at the top.
3. Be able to create renderer pages that can extend either of the layouts above,
be able to override any of the layout-components that they choose, and also to
be able to re-use default content that has been specified by the layout
definition(s) when overriding is not necessary.

In my example files below, pageA.jsp and pageB.jsp are the renderer pages. They
both specify layoutWithMenu.jsp as their layout definition. LayoutWithMenu.jsp
in turn specifies layout.jsp as its layout definition.

Within pageA.jsp, I want to be able to override content for layout-component
"header". But I want to make sure that the default content for "footer" is still
rendered and not overridden.

Within pageB.jsp, I want to be able to override the layout-component "footer"
and let the default content render for "header".

I can't find a way to conditionally pass the overridden layout-components
through layoutWithMenu.jsp only when content has actually been specified by the
renderer page. When always passing through all layout-components, the components
that are not actually overridden are blanked out (I guess they are overridden by
a null value?).



Here are my files:

(layout.jsp)
<c:set var="header">
    Default header
</c:set>
<c:set var="footer">
        Default Footer
</c:set>
<stripes:layout-definition>
    <html>
        </head>
        <body>
            ${header}
            <div>${body}</div>
            ${footer}
        </body>
    </html>
</stripes:layout-definition>


(layoutWithMenu.jsp)
<stripes:layout-definition>
    <stripes:layout-render name="/WEB-INF/jsp/templates/layout.jsp" 
            title="${title}" 
            header="${header}"
            footer="${footer}">
        
        <stripes:layout-component name="body">
            <div class="menu">
                <span class="menu-item">
                    <stripes:link beanclass="com.MyActionBean"
event="myEvent1">Menu 1</stripes:link>
                </span>
                <span>|</span>
                <span class="menu-item">
                    <stripes:link beanclass="com.MyActionBean"
event="myEvent2">Menu 2</stripes:link>
                </span>
            </div>
            ${body}
        </stripes:layout-component>
    </stripes:layout-render>
</stripes:layout-definition>


(pageA.jsp)
<stripes:layout-render name="/WEB-INF/jsp/templates/layoutWithMenu.jsp"
title="Page A Title">
    <stripes:layout-component name="header">
       Page A Header
    </stripes:layout-component>
    
    <stripes:layout-component name="body">
        Page A Body
    </stripes:layout-component>
</stripes:layout-render>

(pageB.jsp)
<stripes:layout-render name="/WEB-INF/jsp/templates/layoutWithMenu.jsp"
title="Page B Title">
    <stripes:layout-component name="footer">
       Page B footer
    </stripes:layout-component>
    
    <stripes:layout-component name="body">
        Page B body
    </stripes:layout-component>
</stripes:layout-render>


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Stripes-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-users

Reply via email to