Sébastien Deleuze created PLUTO-641: ---------------------------------------
Summary: 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)