You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Laurie Harper <la...@holoweb.net> on 2005/12/01 19:32:46 UTC

[struts-faces] weird JSPException converting Tiles layout

Having successfully converted a couple of tile JSPs to JSF, I just tried 
converting a layout. I'm getting a really weird behaviour which I can't 
explain... It *looks* like Tiles is closing the response stream in spite 
of flush="false", but if that were the case I'd expect the following 
exception to occur sooner in the generated servlet.

Here's the relevant snippet of the layout JSP:

   ...
   <f:subview id="foo">
     <!--<t:get name="content" flush="false"/>-->
     <t:insert name="content" flush="false"/>
   </f:subview>

   <jsp:scriptlet>System.out.println("layout 4");</jsp:scriptlet>

   <br /><br /><br /><br /><br /><br />

       </body>
     </s:html>
   <jsp:scriptlet>System.out.println("layout 5");</jsp:scriptlet>
   </f:view>
   </jsp:root>

The exception is thrown from s:view's doEndTag but, looking at the 
servlet, I see this:

             ...
             if (_jspx_meth_f_subview_0(_jspx_th_s_html_0, 
_jspx_page_context))
               return;
System.out.println("layout 4");
             out.write("<br/>");
             out.write("<br/>");
             out.write("<br/>");
             out.write("<br/>");
             out.write("<br/>");
             out.write("<br/>");
             out.write("</body>");
           }
           if (_jspx_th_s_html_0.doEndTag() == 
javax.servlet.jsp.tagext.Tag.SKIP_PAGE)
             return;
           ...

I do see 'layout 4' traced to stdout, so the series of calls to 
out.write() must be getting executed and doesn't result in an exception, 
as I would expect if the response had been closed at that point. But 
there's nothing between them and the call to s:view's doEndTag so, 
unless it's the s:view tag that's closing the stream, why do I end up 
with an exception?

And if it is Tiles that's closing the response, how do I make it *not* 
do that?

Oh, just for completeness, here's the relevant snips of tiles-defs.xml:

     <definition name=".core.layout" path="/pages/core/layout.faces">
         <put name="title" value="PAGE TITLE"/>
         <put name="stylesheet" value="PAGE STYLE"/>
         <put name="section" value="SITE SECTION"/>
         <put name="content" value="PAGE CONTENT"/>
     </definition>

     <definition name=".projects.layout" extends=".core.layout">
         <put name="section" value="projects"/>
         <put name="stylesheet" value="/pages/projects/project-style.css"/>
     </definition>

     <definition name=".projects.list" extends=".projects.layout">
         <put name="content" value="/pages/projects/Projects.jsp"/>
     </definition>

And here's the exception:

layout 4
ERROR [http-8080-Processor24] 
ContainerBase.[Catalina].[localhost].[/].[jsp] - Servlet.service() for 
servlet jsp threw exception
java.io.IOException: Stream closed
	at 
org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:203)
	at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:311)
	at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:336)
	at 
org.apache.myfaces.renderkit.html.HtmlResponseWriterImpl.endElement(HtmlResponseWriterImpl.java:243)
	at 
org.apache.struts.faces.renderer.HtmlRenderer.encodeEnd(HtmlRenderer.java:110)
	at 
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:331)
	at javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:349)
	at javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:253)
	at 
org.apache.jsp.pages.core.layout_jsp._jspService(org.apache.jsp.pages.core.layout_jsp:337)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
	at 
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
	at 
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
	at 
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
	at 
org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:415)
	at 
org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:234)
	at 
org.apache.struts.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
	at 
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:300)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:95)
	at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
	at 
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
	at 
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
	at 
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
	at 
org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:415)
	at 
org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:234)
	at 
org.apache.struts.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
	at 
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:300)
	at 
org.apache.struts.faces.application.FacesTilesRequestProcessor.doForward(FacesTilesRequestProcessor.java:147)
	at 
org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:239)
	at 
org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:302)
	at 
org.apache.struts.faces.application.FacesTilesRequestProcessor.processForwardConfig(FacesTilesRequestProcessor.java:286)
	at 
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at 
com.foo.projility.web.auth.UserAuthenticationFilter.doFilter(UserAuthenticationFilter.java:80)
	at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at 
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172)
	at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
	at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
	at 
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at 
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:613)


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


Re: [struts-faces] weird JSPException converting Tiles layout

Posted by Laurie Harper <la...@holoweb.net>.
It's a tag supplied by the struts-faces integration library, providing a 
JSF-aware equivalent of the html:html tag supplied with 'standard' Struts.

L.

Yujun Liang wrote:
> I don't know JSF, but I just want to know what is </s:html>?
> 
> On 12/5/05, Laurie Harper <la...@holoweb.net> wrote:
>> Anyone have any ideas on this one? My next step in figuring it out will
>> be to step through the code for tiles:get / tiles:insert in a debugger
>> and see if I can spot where the JSP output stream is getting closed, but
>> as far as I can see I'm not doing anything different than the example2
>> app that ships with struts-faces so I'm confused as to why I'm having
>> problems ;-)
>>
>> L.
>>
>> Laurie Harper wrote:
>>> Having successfully converted a couple of tile JSPs to JSF, I just tried
>>> converting a layout. I'm getting a really weird behaviour which I can't
>>> explain... It *looks* like Tiles is closing the response stream in spite
>>> of flush="false", but if that were the case I'd expect the following
>>> exception to occur sooner in the generated servlet.
>>>
>>> Here's the relevant snippet of the layout JSP:
>>>
>>>   ...
>>>   <f:subview id="foo">
>>>     <!--<t:get name="content" flush="false"/>-->
>>>     <t:insert name="content" flush="false"/>
>>>   </f:subview>
>>>
>>>   <jsp:scriptlet>System.out.println("layout 4");</jsp:scriptlet>
>>>
>>>   <br /><br /><br /><br /><br /><br />
>>>
>>>       </body>
>>>     </s:html>
>>>   <jsp:scriptlet>System.out.println("layout 5");</jsp:scriptlet>
>>>   </f:view>
>>>   </jsp:root>
>>>
>>> The exception is thrown from s:view's doEndTag but, looking at the
>>> servlet, I see this:
>>>
>>>             ...
>>>             if (_jspx_meth_f_subview_0(_jspx_th_s_html_0,
>>> _jspx_page_context))
>>>               return;
>>> System.out.println("layout 4");
>>>             out.write("<br/>");
>>>             out.write("<br/>");
>>>             out.write("<br/>");
>>>             out.write("<br/>");
>>>             out.write("<br/>");
>>>             out.write("<br/>");
>>>             out.write("</body>");
>>>           }
>>>           if (_jspx_th_s_html_0.doEndTag() ==
>>> javax.servlet.jsp.tagext.Tag.SKIP_PAGE)
>>>             return;
>>>           ...
>>>
>>> I do see 'layout 4' traced to stdout, so the series of calls to
>>> out.write() must be getting executed and doesn't result in an exception,
>>> as I would expect if the response had been closed at that point. But
>>> there's nothing between them and the call to s:view's doEndTag so,
>>> unless it's the s:view tag that's closing the stream, why do I end up
>>> with an exception?
>>>
>>> And if it is Tiles that's closing the response, how do I make it *not*
>>> do that?
>>>
>>> Oh, just for completeness, here's the relevant snips of tiles-defs.xml:
>>>
>>>     <definition name=".core.layout" path="/pages/core/layout.faces">
>>>         <put name="title" value="PAGE TITLE"/>
>>>         <put name="stylesheet" value="PAGE STYLE"/>
>>>         <put name="section" value="SITE SECTION"/>
>>>         <put name="content" value="PAGE CONTENT"/>
>>>     </definition>
>>>
>>>     <definition name=".projects.layout" extends=".core.layout">
>>>         <put name="section" value="projects"/>
>>>         <put name="stylesheet" value="/pages/projects/project-style.css
>> "/>
>>>     </definition>
>>>
>>>     <definition name=".projects.list" extends=".projects.layout">
>>>         <put name="content" value="/pages/projects/Projects.jsp"/>
>>>     </definition>
>>>
>>> And here's the exception:
>>>
>>> layout 4
>>> ERROR [http-8080-Processor24]
>>> ContainerBase.[Catalina].[localhost].[/].[jsp] - Servlet.service() for
>>> servlet jsp threw exception
>>> java.io.IOException: Stream closed
>>>     at
>>> org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java
>> :203)
>>>     at
>>> org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:311)
>>>     at
>>> org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:336)
>>>     at
>>> org.apache.myfaces.renderkit.html.HtmlResponseWriterImpl.endElement(
>> HtmlResponseWriterImpl.java:243)
>>>     at
>>> org.apache.struts.faces.renderer.HtmlRenderer.encodeEnd(
>> HtmlRenderer.java:110)
>>>     at
>>> javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java
>> :331)
>>>     at javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java
>> :349)
>>>     at javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java
>> :253)
>>>     at
>>> org.apache.jsp.pages.core.layout_jsp._jspService(
>> org.apache.jsp.pages.core.layout_jsp:337)
>>>     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java
>> :97)
>>>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>>>     at
>>> org.apache.jasper.servlet.JspServletWrapper.service(
>> JspServletWrapper.java:322)
>>>     at
>>> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
>>>     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
>>>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>>>     at
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> ApplicationFilterChain.java:252)
>>>     at
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> ApplicationFilterChain.java:173)
>>>     at
>>> org.apache.catalina.core.ApplicationDispatcher.invoke(
>> ApplicationDispatcher.java:672)
>>>     at
>>> org.apache.catalina.core.ApplicationDispatcher.processRequest(
>> ApplicationDispatcher.java:463)
>>>     at
>>> org.apache.catalina.core.ApplicationDispatcher.doForward(
>> ApplicationDispatcher.java:398)
>>>     at
>>> org.apache.catalina.core.ApplicationDispatcher.forward(
>> ApplicationDispatcher.java:301)
>>>     at
>>> org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(
>> ServletExternalContextImpl.java:415)
>>>     at
>>> org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(
>> JspViewHandlerImpl.java:234)
>>>     at
>>> org.apache.struts.faces.application.ViewHandlerImpl.renderView(
>> ViewHandlerImpl.java:130)
>>>     at
>>> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java
>> :300)
>>>     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:95)
>>>     at
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> ApplicationFilterChain.java:252)
>>>     at
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> ApplicationFilterChain.java:173)
>>>     at
>>> org.apache.catalina.core.ApplicationDispatcher.invoke(
>> ApplicationDispatcher.java:672)
>>>     at
>>> org.apache.catalina.core.ApplicationDispatcher.processRequest(
>> ApplicationDispatcher.java:463)
>>>     at
>>> org.apache.catalina.core.ApplicationDispatcher.doForward(
>> ApplicationDispatcher.java:398)
>>>     at
>>> org.apache.catalina.core.ApplicationDispatcher.forward(
>> ApplicationDispatcher.java:301)
>>>     at
>>> org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(
>> ServletExternalContextImpl.java:415)
>>>     at
>>> org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(
>> JspViewHandlerImpl.java:234)
>>>     at
>>> org.apache.struts.faces.application.ViewHandlerImpl.renderView(
>> ViewHandlerImpl.java:130)
>>>     at
>>> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java
>> :300)
>>>     at
>>> org.apache.struts.faces.application.FacesTilesRequestProcessor.doForward
>> (FacesTilesRequestProcessor.java:147)
>>>     at
>>> org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(
>> TilesRequestProcessor.java:239)
>>>     at
>>> org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(
>> TilesRequestProcessor.java:302)
>>>     at
>>>
>> org.apache.struts.faces.application.FacesTilesRequestProcessor.processForwardConfig
>> (FacesTilesRequestProcessor.java:286)
>>>     at
>>> org.apache.struts.action.RequestProcessor.process(RequestProcessor.java
>> :229)
>>>     at
>>> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
>>>     at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java
>> :414)
>>>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
>>>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>>>     at
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> ApplicationFilterChain.java:252)
>>>     at
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> ApplicationFilterChain.java:173)
>>>     at
>>> com.foo.projility.web.auth.UserAuthenticationFilter.doFilter(
>> UserAuthenticationFilter.java:80)
>>>     at
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> ApplicationFilterChain.java:202)
>>>     at
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> ApplicationFilterChain.java:173)
>>>     at
>>>
>> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal
>> (OpenSessionInViewFilter.java:172)
>>>     at
>>> org.springframework.web.filter.OncePerRequestFilter.doFilter(
>> OncePerRequestFilter.java:76)
>>>     at
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> ApplicationFilterChain.java:202)
>>>     at
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> ApplicationFilterChain.java:173)
>>>     at
>>> org.apache.catalina.core.StandardWrapperValve.invoke(
>> StandardWrapperValve.java:213)
>>>     at
>>> org.apache.catalina.core.StandardContextValve.invoke(
>> StandardContextValve.java:178)
>>>     at
>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
>> :126)
>>>     at
>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
>> :105)
>>>     at
>>> org.apache.catalina.core.StandardEngineValve.invoke(
>> StandardEngineValve.java:107)
>>>     at
>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
>> :148)
>>>     at
>>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
>> :856)
>>>     at
>>>
>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection
>> (Http11Protocol.java:744)
>>>     at
>>> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(
>> PoolTcpEndpoint.java:527)
>>>     at
>>> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(
>> LeaderFollowerWorkerThread.java:80)
>>>     at
>>> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(
>> ThreadPool.java:684)
>>>     at java.lang.Thread.run(Thread.java:613)
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
> 
> 
> --
> Yujun Liang
> yujun.liang@acm.org
> 


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


Re: [struts-faces] weird JSPException converting Tiles layout

Posted by Yujun Liang <yu...@acm.org>.
I don't know JSF, but I just want to know what is </s:html>?

On 12/5/05, Laurie Harper <la...@holoweb.net> wrote:
>
> Anyone have any ideas on this one? My next step in figuring it out will
> be to step through the code for tiles:get / tiles:insert in a debugger
> and see if I can spot where the JSP output stream is getting closed, but
> as far as I can see I'm not doing anything different than the example2
> app that ships with struts-faces so I'm confused as to why I'm having
> problems ;-)
>
> L.
>
> Laurie Harper wrote:
> > Having successfully converted a couple of tile JSPs to JSF, I just tried
> > converting a layout. I'm getting a really weird behaviour which I can't
> > explain... It *looks* like Tiles is closing the response stream in spite
> > of flush="false", but if that were the case I'd expect the following
> > exception to occur sooner in the generated servlet.
> >
> > Here's the relevant snippet of the layout JSP:
> >
> >   ...
> >   <f:subview id="foo">
> >     <!--<t:get name="content" flush="false"/>-->
> >     <t:insert name="content" flush="false"/>
> >   </f:subview>
> >
> >   <jsp:scriptlet>System.out.println("layout 4");</jsp:scriptlet>
> >
> >   <br /><br /><br /><br /><br /><br />
> >
> >       </body>
> >     </s:html>
> >   <jsp:scriptlet>System.out.println("layout 5");</jsp:scriptlet>
> >   </f:view>
> >   </jsp:root>
> >
> > The exception is thrown from s:view's doEndTag but, looking at the
> > servlet, I see this:
> >
> >             ...
> >             if (_jspx_meth_f_subview_0(_jspx_th_s_html_0,
> > _jspx_page_context))
> >               return;
> > System.out.println("layout 4");
> >             out.write("<br/>");
> >             out.write("<br/>");
> >             out.write("<br/>");
> >             out.write("<br/>");
> >             out.write("<br/>");
> >             out.write("<br/>");
> >             out.write("</body>");
> >           }
> >           if (_jspx_th_s_html_0.doEndTag() ==
> > javax.servlet.jsp.tagext.Tag.SKIP_PAGE)
> >             return;
> >           ...
> >
> > I do see 'layout 4' traced to stdout, so the series of calls to
> > out.write() must be getting executed and doesn't result in an exception,
> > as I would expect if the response had been closed at that point. But
> > there's nothing between them and the call to s:view's doEndTag so,
> > unless it's the s:view tag that's closing the stream, why do I end up
> > with an exception?
> >
> > And if it is Tiles that's closing the response, how do I make it *not*
> > do that?
> >
> > Oh, just for completeness, here's the relevant snips of tiles-defs.xml:
> >
> >     <definition name=".core.layout" path="/pages/core/layout.faces">
> >         <put name="title" value="PAGE TITLE"/>
> >         <put name="stylesheet" value="PAGE STYLE"/>
> >         <put name="section" value="SITE SECTION"/>
> >         <put name="content" value="PAGE CONTENT"/>
> >     </definition>
> >
> >     <definition name=".projects.layout" extends=".core.layout">
> >         <put name="section" value="projects"/>
> >         <put name="stylesheet" value="/pages/projects/project-style.css
> "/>
> >     </definition>
> >
> >     <definition name=".projects.list" extends=".projects.layout">
> >         <put name="content" value="/pages/projects/Projects.jsp"/>
> >     </definition>
> >
> > And here's the exception:
> >
> > layout 4
> > ERROR [http-8080-Processor24]
> > ContainerBase.[Catalina].[localhost].[/].[jsp] - Servlet.service() for
> > servlet jsp threw exception
> > java.io.IOException: Stream closed
> >     at
> > org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java
> :203)
> >     at
> > org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:311)
> >     at
> > org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:336)
> >     at
> > org.apache.myfaces.renderkit.html.HtmlResponseWriterImpl.endElement(
> HtmlResponseWriterImpl.java:243)
> >
> >     at
> > org.apache.struts.faces.renderer.HtmlRenderer.encodeEnd(
> HtmlRenderer.java:110)
> >
> >     at
> > javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java
> :331)
> >     at javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java
> :349)
> >     at javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java
> :253)
> >     at
> > org.apache.jsp.pages.core.layout_jsp._jspService(
> org.apache.jsp.pages.core.layout_jsp:337)
> >
> >     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java
> :97)
> >     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
> >     at
> > org.apache.jasper.servlet.JspServletWrapper.service(
> JspServletWrapper.java:322)
> >
> >     at
> > org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
> >     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
> >     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
> >     at
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:252)
> >
> >     at
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
> >
> >     at
> > org.apache.catalina.core.ApplicationDispatcher.invoke(
> ApplicationDispatcher.java:672)
> >
> >     at
> > org.apache.catalina.core.ApplicationDispatcher.processRequest(
> ApplicationDispatcher.java:463)
> >
> >     at
> > org.apache.catalina.core.ApplicationDispatcher.doForward(
> ApplicationDispatcher.java:398)
> >
> >     at
> > org.apache.catalina.core.ApplicationDispatcher.forward(
> ApplicationDispatcher.java:301)
> >
> >     at
> > org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(
> ServletExternalContextImpl.java:415)
> >
> >     at
> > org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(
> JspViewHandlerImpl.java:234)
> >
> >     at
> > org.apache.struts.faces.application.ViewHandlerImpl.renderView(
> ViewHandlerImpl.java:130)
> >
> >     at
> > org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java
> :300)
> >     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:95)
> >     at
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:252)
> >
> >     at
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
> >
> >     at
> > org.apache.catalina.core.ApplicationDispatcher.invoke(
> ApplicationDispatcher.java:672)
> >
> >     at
> > org.apache.catalina.core.ApplicationDispatcher.processRequest(
> ApplicationDispatcher.java:463)
> >
> >     at
> > org.apache.catalina.core.ApplicationDispatcher.doForward(
> ApplicationDispatcher.java:398)
> >
> >     at
> > org.apache.catalina.core.ApplicationDispatcher.forward(
> ApplicationDispatcher.java:301)
> >
> >     at
> > org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(
> ServletExternalContextImpl.java:415)
> >
> >     at
> > org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(
> JspViewHandlerImpl.java:234)
> >
> >     at
> > org.apache.struts.faces.application.ViewHandlerImpl.renderView(
> ViewHandlerImpl.java:130)
> >
> >     at
> > org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java
> :300)
> >     at
> > org.apache.struts.faces.application.FacesTilesRequestProcessor.doForward
> (FacesTilesRequestProcessor.java:147)
> >
> >     at
> > org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(
> TilesRequestProcessor.java:239)
> >
> >     at
> > org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(
> TilesRequestProcessor.java:302)
> >
> >     at
> >
> org.apache.struts.faces.application.FacesTilesRequestProcessor.processForwardConfig
> (FacesTilesRequestProcessor.java:286)
> >
> >     at
> > org.apache.struts.action.RequestProcessor.process(RequestProcessor.java
> :229)
> >
> >     at
> > org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
> >     at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java
> :414)
> >     at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
> >     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
> >     at
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:252)
> >
> >     at
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
> >
> >     at
> > com.foo.projility.web.auth.UserAuthenticationFilter.doFilter(
> UserAuthenticationFilter.java:80)
> >
> >     at
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:202)
> >
> >     at
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
> >
> >     at
> >
> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal
> (OpenSessionInViewFilter.java:172)
> >
> >     at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(
> OncePerRequestFilter.java:76)
> >
> >     at
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:202)
> >
> >     at
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
> >
> >     at
> > org.apache.catalina.core.StandardWrapperValve.invoke(
> StandardWrapperValve.java:213)
> >
> >     at
> > org.apache.catalina.core.StandardContextValve.invoke(
> StandardContextValve.java:178)
> >
> >     at
> > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
> :126)
> >
> >     at
> > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
> :105)
> >
> >     at
> > org.apache.catalina.core.StandardEngineValve.invoke(
> StandardEngineValve.java:107)
> >
> >     at
> > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
> :148)
> >     at
> > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
> :856)
> >     at
> >
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection
> (Http11Protocol.java:744)
> >
> >     at
> > org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(
> PoolTcpEndpoint.java:527)
> >
> >     at
> > org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(
> LeaderFollowerWorkerThread.java:80)
> >
> >     at
> > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(
> ThreadPool.java:684)
> >
> >     at java.lang.Thread.run(Thread.java:613)
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>


--
Yujun Liang
yujun.liang@acm.org

Re: [struts-faces] weird JSPException converting Tiles layout

Posted by Laurie Harper <la...@holoweb.net>.
Anyone have any ideas on this one? My next step in figuring it out will 
be to step through the code for tiles:get / tiles:insert in a debugger 
and see if I can spot where the JSP output stream is getting closed, but 
as far as I can see I'm not doing anything different than the example2 
app that ships with struts-faces so I'm confused as to why I'm having 
problems ;-)

L.

Laurie Harper wrote:
> Having successfully converted a couple of tile JSPs to JSF, I just tried 
> converting a layout. I'm getting a really weird behaviour which I can't 
> explain... It *looks* like Tiles is closing the response stream in spite 
> of flush="false", but if that were the case I'd expect the following 
> exception to occur sooner in the generated servlet.
> 
> Here's the relevant snippet of the layout JSP:
> 
>   ...
>   <f:subview id="foo">
>     <!--<t:get name="content" flush="false"/>-->
>     <t:insert name="content" flush="false"/>
>   </f:subview>
> 
>   <jsp:scriptlet>System.out.println("layout 4");</jsp:scriptlet>
> 
>   <br /><br /><br /><br /><br /><br />
> 
>       </body>
>     </s:html>
>   <jsp:scriptlet>System.out.println("layout 5");</jsp:scriptlet>
>   </f:view>
>   </jsp:root>
> 
> The exception is thrown from s:view's doEndTag but, looking at the 
> servlet, I see this:
> 
>             ...
>             if (_jspx_meth_f_subview_0(_jspx_th_s_html_0, 
> _jspx_page_context))
>               return;
> System.out.println("layout 4");
>             out.write("<br/>");
>             out.write("<br/>");
>             out.write("<br/>");
>             out.write("<br/>");
>             out.write("<br/>");
>             out.write("<br/>");
>             out.write("</body>");
>           }
>           if (_jspx_th_s_html_0.doEndTag() == 
> javax.servlet.jsp.tagext.Tag.SKIP_PAGE)
>             return;
>           ...
> 
> I do see 'layout 4' traced to stdout, so the series of calls to 
> out.write() must be getting executed and doesn't result in an exception, 
> as I would expect if the response had been closed at that point. But 
> there's nothing between them and the call to s:view's doEndTag so, 
> unless it's the s:view tag that's closing the stream, why do I end up 
> with an exception?
> 
> And if it is Tiles that's closing the response, how do I make it *not* 
> do that?
> 
> Oh, just for completeness, here's the relevant snips of tiles-defs.xml:
> 
>     <definition name=".core.layout" path="/pages/core/layout.faces">
>         <put name="title" value="PAGE TITLE"/>
>         <put name="stylesheet" value="PAGE STYLE"/>
>         <put name="section" value="SITE SECTION"/>
>         <put name="content" value="PAGE CONTENT"/>
>     </definition>
> 
>     <definition name=".projects.layout" extends=".core.layout">
>         <put name="section" value="projects"/>
>         <put name="stylesheet" value="/pages/projects/project-style.css"/>
>     </definition>
> 
>     <definition name=".projects.list" extends=".projects.layout">
>         <put name="content" value="/pages/projects/Projects.jsp"/>
>     </definition>
> 
> And here's the exception:
> 
> layout 4
> ERROR [http-8080-Processor24] 
> ContainerBase.[Catalina].[localhost].[/].[jsp] - Servlet.service() for 
> servlet jsp threw exception
> java.io.IOException: Stream closed
>     at 
> org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:203)
>     at 
> org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:311)
>     at 
> org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:336)
>     at 
> org.apache.myfaces.renderkit.html.HtmlResponseWriterImpl.endElement(HtmlResponseWriterImpl.java:243) 
> 
>     at 
> org.apache.struts.faces.renderer.HtmlRenderer.encodeEnd(HtmlRenderer.java:110) 
> 
>     at 
> javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:331)
>     at javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:349)
>     at javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:253)
>     at 
> org.apache.jsp.pages.core.layout_jsp._jspService(org.apache.jsp.pages.core.layout_jsp:337) 
> 
>     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>     at 
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322) 
> 
>     at 
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
>     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>     at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) 
> 
>     at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
> 
>     at 
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672) 
> 
>     at 
> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463) 
> 
>     at 
> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398) 
> 
>     at 
> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301) 
> 
>     at 
> org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:415) 
> 
>     at 
> org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:234) 
> 
>     at 
> org.apache.struts.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130) 
> 
>     at 
> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:300)
>     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:95)
>     at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) 
> 
>     at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
> 
>     at 
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672) 
> 
>     at 
> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463) 
> 
>     at 
> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398) 
> 
>     at 
> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301) 
> 
>     at 
> org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:415) 
> 
>     at 
> org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:234) 
> 
>     at 
> org.apache.struts.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130) 
> 
>     at 
> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:300)
>     at 
> org.apache.struts.faces.application.FacesTilesRequestProcessor.doForward(FacesTilesRequestProcessor.java:147) 
> 
>     at 
> org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:239) 
> 
>     at 
> org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:302) 
> 
>     at 
> org.apache.struts.faces.application.FacesTilesRequestProcessor.processForwardConfig(FacesTilesRequestProcessor.java:286) 
> 
>     at 
> org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229) 
> 
>     at 
> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
>     at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>     at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) 
> 
>     at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
> 
>     at 
> com.foo.projility.web.auth.UserAuthenticationFilter.doFilter(UserAuthenticationFilter.java:80) 
> 
>     at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) 
> 
>     at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
> 
>     at 
> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172) 
> 
>     at 
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
> 
>     at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) 
> 
>     at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
> 
>     at 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
> 
>     at 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) 
> 
>     at 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) 
> 
>     at 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) 
> 
>     at 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) 
> 
>     at 
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
>     at 
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
>     at 
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744) 
> 
>     at 
> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) 
> 
>     at 
> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) 
> 
>     at 
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) 
> 
>     at java.lang.Thread.run(Thread.java:613)


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