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