You can't call a Struts action once you have already written something in the
output stream.
  This is because jsp spec forbid call to forward() when you have written
something. Using a Struts action do a forward ...
  You can try to use Tiles instead of Struts template, it should work with
actions in templates.

    Cedric

"Vaillancourt, Richard" wrote:

> I have a template tag where I want to exec a .do...
>
> Below is the template.jsp, the .jsp it ulitmately wants to include, config
> file specifying action, and stack dump...
>
> It hits the action perform as expected and returns the correct .jsp string
> on success.
>
> I receive a
>
> //////////////////////////               the template
>
> <%@ taglib uri='/WEB-INF/struts-template.tld' prefix='template' %>
> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
> <%@ taglib uri="/WEB-INF/struts-menu.tld" prefix="menu" %>
>
> <template:insert template='/workflowTemplate.jsp'>
> <template:put name='title' content='Templates - Test' direct='true'/>
> <template:put name='sidebar' content='/setSecurityCode.do' />
> <template:put name='header' content='/workflowHeader.jsp' />
> <template:put name='content' content='/workflowwelcome.jsp'/>
>
> </template:insert>
>
> ////////////////////////  the workflowSidebarrrr.jsp
>
> <%@ page language="java" %>
> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
> <%@ taglib uri="/WEB-INF/struts-menu.tld" prefix="menu" %>
>
> <table cellpadding=0 cellspacing=0>
> <tr valign=top>
>  <td>
>     <menu:useMenuDisplayer name="Simple"
> bundle="org.apache.struts.action.MESSAGE">
>     <table cellpadding=0 cellspacing=0>
>       <tr>
>         <td>
>
>                         <logic:equal name="addWorkgroupForm"
> property="userAdmin"
>                                  scope="request" value="FALSE">
>
>                                 <menu:displayMenu name="WorkflowAdmin2"/>
>
>                         </logic:equal>
>
>                         <logic:equal name="addWorkgroupForm"
> property="userAdmin"
>                                  scope="request" value="TRUE">
>
>                                 <menu:displayMenu name="WorkflowAdmin"/>
>
>                         </logic:equal>
>
>         </td>
>       </tr>
>     </table>
>     </menu:useMenuDisplayer>
>  </td>
> </tr>
> </table>
> //////////////////////////////////////  struts config file
>
> <action    path="/addWorkgroup"
>                    type="workflowadminstruts.AddWorkgroupAction"
>                    name="addWorkgroupForm"
>                    scope="request"
>                    validate="false">
>         <forward name="success"
> path="/workflowwelcome.jsp"/>
>     </action>
>
> A recursive error was detected.
> The server cannot use specified error page. Please check the application
> error-path.
> Original Error:
> Error Message: ERROR: Cannot forward. Writer or Stream already obtained.
> Error Code: 500
> Target Servlet: null
> Error Stack:
>
> Root Error-1: ERROR: Cannot forward. Writer or Stream already obtained.
> java.lang.IllegalStateException: ERROR: Cannot forward. Writer or Stream
> already obtained. java.lang.Throwable(java.lang.String)
> java.lang.Exceptio(java.lang.String)
> java.lang.RuntimeException(java.lang.String)
> java.lang.IllegalStateException(java.lang.String) void
> com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.forward(javax.servlet.
> ServletRequest, javax.servlet.ServletResponse) void
> org.apache.struts.action.ActionServlet.processActionForward(org.apache.strut
> s.action.ActionForward, org.apache.struts.action.ActionMapping,
> org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest,
> javax.servlet.http.HttpServletResponse) void
> org.apache.struts.action.ActionServlet.process(javax.servlet.http.HttpServle
> tRequest, javax.servlet.http.HttpServletResponse) void
> org.apache.struts.action.ActionServlet.doGet(javax.servlet.http.HttpServletR
> equest, javax.servlet.http.HttpServletResponse) void
> javax.servlet.http.HttpServlet.service(javax.servlet.http.HttpServletRequest
> , javax.servlet.http.HttpServletResponse) void
> javax.servlet.http.HttpServlet.service(javax.servlet.ServletRequest,
> javax.servlet.ServletResponse) void
> com.ibm.servlet.engine.webapp.StrictServletInstance.doService(javax.servlet.
> ServletRequest, javax.servlet.ServletResponse) void
> com.ibm.servlet.engine.webapp.StrictLifecycleServlet._service(javax.servlet.
> ServletRequest, javax.servlet.ServletResponse) void
> com.ibm.servlet.engine.webapp.IdleServletState.service(com.ibm.servlet.engin
> e.webapp.StrictLifecycleServlet,
> javax.servlet.ServletRequest, javax.servlet.ServletResponse) void
> com.ibm.servlet.engine.webapp.StrictLifecycleServlet.service(javax.servlet.S
> ervletRequest, javax.servlet.ServletResponse) void
> com.ibm.servlet.engine.webapp.ServletInstance.service(javax.servlet.ServletR
> equest, javax.servlet.ServletResponse,
> com.ibm.servlet.engine.webapp.WebAppServletInvocationEvent) void
> com.ibm.servlet.engine.webapp.ValidServletReferenceState.dispatch(com.ibm.se
> rvlet.engine.webapp.ServletInstanceReference, javax.servlet.ServletRequest,
> javax.servlet.ServletResponse,
> com.ibm.servlet.engine.webapp.WebAppServletInvocationEvent) void
> com.ibm.servlet.engine.webapp.ServletInstanceReference.dispatch(javax.servle
> t.ServletRequest, javax.servlet.ServletResponse,
> com.ibm.servlet.engine.webapp.WebAppServletInvocationEvent) void
> com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.handleWebAppDispatch(c
> om.ibm.servlet.engine.webapp.WebAppRequest,
> javax.servlet.http.HttpServletResponse, boolean) void
> com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.dispatch(javax.servlet
> .ServletRequest, javax.servlet.ServletResponse, boolean) void
> com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.include(javax.servlet.
> ServletRequest, javax.servlet.ServletResponse) void
> org.apache.jasper.runtime.PageContextImpl.include(java.lang.String) int
> org.apache.struts.taglib.template.GetTag.doStartTag() void
> _workflowTemplate_xjsp._jspService(javax.servlet.http.HttpServletRequest,
> javax.servlet.http.HttpServletResponse) void
> org.apache.jasper.runtime.HttpJspBase.service(javax.servlet.http.HttpServlet
> Request, javax.servlet.http.HttpServletResponse) void
> javax.servlet.http.HttpServlet.service(javax.servlet.ServletRequest,
> javax.servlet.ServletResponse) void
> org.apache.jasper.runtime.JspServlet$JspServletWrapper.service(javax.servlet
> .http.HttpServletRequest, javax.servlet.http.HttpServletResponse, boolean)
> void
> org.apache.jasper.runtime.JspServlet.serviceJspFile(javax.servlet.http.HttpS
> ervletRequest, javax.servlet.http.HttpServletResponse, java.lang.String,
> java.lang.Throwable, boolean) void
> org.apache.jasper.runtime.JspServlet.service(javax.servlet.http.HttpServletR
> equest, javax.servlet.http.HttpServletResponse) void
> javax.servlet.http.HttpServlet.service(javax.servlet.ServletRequest,
> javax.servlet.ServletResponse) void
> com.ibm.servlet.engine.webapp.StrictServletInstance.doService(javax.servlet.
> ServletRequest, javax.servlet.ServletResponse) void
> com.ibm.servlet.engine.webapp.StrictLifecycleServlet._service(javax.servlet.
> ServletRequest, javax.servlet.ServletResponse) void
> com.ibm.servlet.engine.webapp.ServicingServletState.service(com.ibm.servlet.
> engine.webapp.StrictLifecycleServlet, javax.servlet.ServletRequest,
> javax.servlet.ServletResponse) void
> com.ibm.servlet.engine.webapp.StrictLifecycleServlet.service(javax.servlet.S
> ervletRequest, javax.servlet.ServletResponse) void
> com.ibm.servlet.engine.webapp.ServletInstance.service(javax.servlet.ServletR
> equest, javax.servlet.ServletResponse,
> com.ibm.servlet.engine.webapp.WebAppServletInvocationEvent) void
> com.ibm.servlet.engine.webapp.ValidServletReferenceState.dispatch(com.ibm.se
> rvlet.engine.webapp.ServletInstanceReference, javax.servlet.ServletRequest,
> javax.servlet.ServletResponse,
> com.ibm.servlet.engine.webapp.WebAppServletInvocationEvent) void
> com.ibm.servlet.engine.webapp.ServletInstanceReference.dispatch(javax.servle
> t.ServletRequest, javax.servlet.ServletResponse,
> com.ibm.servlet.engine.webapp.WebAppServletInvocationEvent) void
> com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.handleWebAppDispatch(c
> om.ibm.servlet.engine.webapp.WebAppRequest,
> javax.servlet.http.HttpServletResponse, boolean) void
> com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.dispatch(javax.servlet
> .ServletRequest, javax.servlet.ServletResponse, boolean) void
> com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.include(javax.servlet.
> ServletRequest, javax.servlet.ServletResponse) void
> org.apache.jasper.runtime.PageContextImpl.include(java.lang.String) int
> org.apache.struts.taglib.template.InsertTag.doEndTag()
>
> > -----Original Message-----
> > From: Donnie Hale [SMTP:[EMAIL PROTECTED]]
> > Sent: Thursday, January 10, 2002 11:40 PM
> > To:   Struts Developers List
> > Subject:      RE: AspectJ and Struts Exception handling:
> >
> > I just posted a message to commons about aspectj. :) Very, very cool
> > stuff! What I'd like to see next from that arena is the ability to define
> > pointcuts and aspects dynamically rather than with a recompile.
> >
> > Donnie
> >
> >
> > > -----Original Message-----
> > > From: Nicholas Lesiecki [mailto:[EMAIL PROTECTED]]
> > > Sent: Thursday, January 10, 2002 5:52 PM
> > > To: Struts Developers List
> > > Subject: AspectJ and Struts Exception handling:
> > >
> > >
> > > Hello,
> > >
> > > A while back Rick Hightower submitted a request to change the way
> > > Struts handles errors. His problem (and mine) is that Struts
> > > tends to catch exceptions and throw different exceptions
> > > indicating the problem. Needless to say this can badly obscure
> > > the original cause of the error.
> > >
> > > So today I set about remedying it using AspectJ--an aspect
> > > oriented extension to Java produced by Xerox PARC
> > > (http://www.aspectj.org). I added the following aspect to the
> > > org.apache.struts package:
> > >
> > > public aspect ExceptionLogger{
> > >
> > >   before(Throwable e) : args(e) && handler(Throwable+){
> > >     System.err.println("Exception caught in the Struts framework:");
> > >     e.printStackTrace(System.err);
> > >   }
> > > }
> > >
> > > Then I compiled Struts with an Ant task for AspectJ compilation:
> > >
> > > <target name="compile.library" depends="prepare.library"
> > >      description="Compile Struts library files">
> > >         <ajc srcdir="${src.share.dir}"
> > >             destdir="${build.home}/library/classes">
> > >             <classpath refid="compile.classpath"/>
> > >         </ajc>
> > >       [...task continues as normal...]
> > >
> > > Now all exceptions caught in the Struts framework are
> > > automatically logged to System.err.
> > >
> > > So my question is:
> > >
> > > Should we consider the use of AspectJ in Struts? This would
> > > potentially have no effect on the users of the framework, but
> > > could be valuable for implementing logging and error-handling
> > > policies. The above code could be modified to write to a log4j
> > > log if that would be more convenient.
> > >
> > > Does this intrigue anyone? Should we continue investigation?
> > >
> > > Cheers,
> > >
> > > Nicholas Lesiecki
> > >
> > > (For more info on AspectJ, look for my forthcoming article on
> > > IBM's developerWorks.)
> > >
> > > Technical Team Lead
> > > eBlox, Inc.
> > > (520) 615-9345 x104
> > > Check out my new book!:
> > > Java Tools for Extreme Programming: Mastering Open Source Tools,
> > > including Ant, JUnit, and Cactus
> > >
> > > http://www.amazon.com/exec/obidos/ASIN/047120708X/
> > >
> > >
> > >
> > >
> > > --
> > > To unsubscribe, e-mail:
> > <mailto:[EMAIL PROTECTED]>
> > For additional commands, e-mail:
> > <mailto:[EMAIL PROTECTED]>
> >
> >
> >
> > --
> > To unsubscribe, e-mail:
> > <mailto:[EMAIL PROTECTED]>
> > For additional commands, e-mail:
> > <mailto:[EMAIL PROTECTED]>
>
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to