"Anytime you reference a layout component in EL (e.g., ${body} as in
your sample files) then that component has to be evaluated and buffered
as a string."
OK, sounds logical.
But why use EL if it stops the layout from streaming? I know it's the
only way to reference a layout-component from the layout-definition
while you are within a layout-render. But this would not be necessary if
an extra tag would be introduced for referring to the layout-component.
That would also fix, the current confusing dual usage of the current
layout-component tag, because the tag currently addresses two
semantically different things:
a) It's a tag that defines the layout-component in a lay-out definition
(kind of incoming parameter).
b) It's a tag to reference layout-components from a layout-renderer
(kind of outgoing parameter).
This dual nature of the layout-component tag leads to confusion and
hence creates unnecessary complexity. Thus why not use two separate tag
names, for two semantically different things? One tag for defining the
layout-component in a layout-definition (the current layout-component
name). An other tag for referring to a layout-component in a
layout-renderer (this would be a new tag, for example named
layout-component-reference).
Does this make sense? Is this even possible? Does this make full
streaming layouts possible?
On 08-06-10 3:46, Ben Gunter wrote:
> Great to hear the layouts are rendering properly for you now. The goal
> was to make them behave as closely as possible to the 1.5.3 release. The
> new code does behave a little differently from 1.5.3 in some cases, but
> I think those differences are actually improvements over the last
> release. I know there was one case (though I can't recall it at the
> moment) where 1.5.3 would not handle nesting the way I expected it to,
> but the new code handles it just fine. The new layout tags play nicely
> with form tags now, for example, when a layout definition contains a
> form tag and a layout component contains a partial form. Also, things
> execute in the order one expects them to, which definitely wasn't the
> case before. In 1.5.3 all the component tags executed first and then the
> definition tag executed, which threw people off sometimes.
>
> The layout tags do stream directly to output now when used in the
> simplest fashion. That is, just straight use of the layout-definition,
> layout-render and layout-component tags. When you use the "decorator
> pattern," as Freddy describes in his book, then streaming isn't really
> an option sometimes. Anytime you reference a layout component in EL
> (e.g., ${body} as in your sample files) then that component has to be
> evaluated and buffered as a string. The good news is that components are
> only evaluated and buffered like that on-demand. The object you're
> referencing isn't a String but an Object whose toString() method renders
> the component to a string and returns it. So the buffering only happens
> when it's actually needed, and only what *must* be buffered is buffered.
>
> -Ben
>
> On Mon, Jun 7, 2010 at 6:26 PM, kdeveloper
> <[email protected]
> <mailto:[email protected]>> wrote:
>
> Ben,
>
> The Stripes 1.5.4 beta R1252 seems to render the layouts in my projects
> just as the 1.5.3 release version. I will do some more checks later this
> week.
>
> Do these layout now render directly to the servlet output stream?
>
> -Karen
>
>
> On 08-06-10 0:09, kdeveloper wrote:
> >
> > Pre-build Stripes 1.5.4 (R1252) can be downloaded here:
> >
> > http://kdeveloper.com/stripes-1-5-4-beta/
> >
> >
> > On 07-06-10 22:53, Ben Gunter wrote:
> >> I believe this is fixed with my most recent commit. Everybody please
> >> test out the latest 1.5.x branch and let me know how it goes.
> >>
> >> -Ben
> >>
> >> On Mon, Jun 7, 2010 at 8:44 AM, Ben Gunter
> >> <[email protected]
> <mailto:[email protected]>
> >> <mailto:[email protected]
> <mailto:[email protected]>>> wrote:
> >>
> >> Excellent, thank you. I'll do some testing/bug hunting with
> these
> >> and get back to you.
> >>
> >> -Ben
> >>
> >>
> >> On Mon, Jun 7, 2010 at 8:31 AM, kdeveloper
> >> <[email protected]
> <mailto:[email protected]>
> >> <mailto:[email protected]
> <mailto:[email protected]>>> wrote:
> >>
> >> Ben,
> >>
> >> I've made as simple as possible JSP files that can
> reproduce the
> >> layout
> >> rendering problem in Stripes 1.5.4 beta (R1250). The
> three layers of
> >> layout's seems crucial in reproducing the failure.
> >>
> >>
> >>
> >> testPage.jsp:
> >>
> >> <%...@taglib prefix="s"
> >> uri="http://stripes.sourceforge.net/stripes.tld" %>
> >> [testPage-begin]
> >> <s:layout-render name="/testPageLayout.jsp">
> >> <s:layout-component name="body">
> >> [testPage-body]
> >> </s:layout-component>
> >> </s:layout-render>
> >> [testPage-end]
> >>
> >>
> >>
> >> testPageLayout.jsp:
> >>
> >> <%...@taglib prefix="s"
> >> uri="http://stripes.sourceforge.net/stripes.tld" %>
> >> <s:layout-definition>
> >> [testPageLayout-begin]
> >> <s:layout-render name="/testPageIntermediateLayout.jsp">
> >> <s:layout-component name="body">
> >> [testPageLayout-preBody]
> >> ${body}
> >> [testPageLayout-postBody]
> >> </s:layout-component>
> >> </s:layout-render>
> >> [testPageLayout-end]
> >> </s:layout-definition>
> >>
> >>
> >> testPageIntermediateLayout.jsp:
> >>
> >> <%...@taglib prefix="s"
> >> uri="http://stripes.sourceforge.net/stripes.tld" %>
> >> <s:layout-definition>
> >> [Intermediate-begin]
> >> <s:layout-render name="/testPageSuperLayout.jsp">
> >> <s:layout-component name="body">
> >> [IntermediateLayout-preBody]
> >> ${body}
> >> [IntermediateLayout-postBody]
> >> </s:layout-component>
> >> </s:layout-render>
> >> [Intermediate-end]
> >> </s:layout-definition>
> >>
> >>
> >> testPageSuperLayout.jsp
> >>
> >> <%...@taglib prefix="s"
> >> uri="http://stripes.sourceforge.net/stripes.tld" %>
> >> <s:layout-definition>
> >> [SuperLayout-begin]
> >> ${body}
> >> [SuperLayout-end]
> >> </s:layout-definition>
>
>
>
> ------------------------------------------------------------------------------
> ThinkGeek and WIRED's GeekDad team up for the Ultimate
> GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the
> lucky parental unit. See the prize list and enter to win:
> http://p.sf.net/sfu/thinkgeek-promo
>
>
>
> _______________________________________________
> Stripes-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/stripes-users
------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the
lucky parental unit. See the prize list and enter to win:
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
Stripes-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-users