[
https://issues.apache.org/jira/browse/PLUTO-641?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Scott Nicklous resolved PLUTO-641.
----------------------------------
Resolution: Fixed
this area has been completely refactored and should now work.
> Empty Portlet when using the forward to include fallback mechanism
> ------------------------------------------------------------------
>
> Key: PLUTO-641
> URL: https://issues.apache.org/jira/browse/PLUTO-641
> Project: Pluto
> Issue Type: Bug
> Components: portlet container
> Affects Versions: 2.0.3
> Reporter: Sébastien Deleuze
>
> While working on the [SPR-12374|https://jira.spring.io/browse/SPR-12374]
> Spring bug report, I may have find a bug in the forward to include fallback
> mechanism of Apache Pluto.
> In
> {{[PortletRequestDispatcherImpl#forward()|http://svn.apache.org/viewvc/portals/pluto/tags/pluto-2.0.3/pluto-container/src/main/java/org/apache/pluto/container/impl/PortletRequestDispatcherImpl.java?view=markup#l245]}},
> {{req.setNestedForward()}} is called whether forwarding is possible or not,
> so even if {{requestDispatcher.include(request, response)}} is called, the
> {{forwarded}} attribute is set to {{true}}.
> As a consequence, in
> {{[HttpServletPortletRequestWrapper#setupFirstDispatchPathValues()|http://svn.apache.org/viewvc/portals/pluto/tags/pluto-2.0.3/pluto-container/src/main/java/org/apache/pluto/container/impl/HttpServletPortletRequestWrapper.java?view=markup#l741]}},
> the forward request attributes are used instead of the include ones, and the
> JSP is never rendered.
> In order to fix that, my proposal (untested) would be modify the
> {{PortletRequestDispatcherImpl#forward()}} implementation to:
> {code:java}
> public void forward(ServletRequest request, ServletResponse response) throws
> ServletException, IOException
> {
> HttpServletPortletRequestWrapper req = getWrappedRequest(request);
> HttpServletPortletResponseWrapper res = getWrappedResponse(response);
> res.resetBuffer();
> // cache the current dispatch state
> boolean forwarded = req.isForwarded();
> boolean namedDispatch = req.isNamedDispatch();
> Map<String,Object> pathAttributeValues = req.getPathAttributeValues();
> HttpServletPortletRequestWrapper.PathMethodValues pathMethodValues =
> req.getInitPathMethodValues();
> if (req.isForwardingPossible())
> {
> // (re)initialize the request wrapper to a nested forward
> req.setNestedForward();
> try
> {
> requestDispatcher.forward(request, response);
> }
> finally
> {
> // restore the previously cached dispatch state
> req.restoreFromNestedForward(forwarded, namedDispatch,
> pathMethodValues, pathAttributeValues);
> }
> }
> else
> {
> // need to "fake" the forward using an include
> requestDispatcher.include(request, response);
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)