Resources overewritten by portlet: need to be restored
------------------------------------------------------
Key: PB-9
URL: http://issues.apache.org/jira/browse/PB-9
Project: Portals Bridges
Type: Bug
Components: struts
Versions: 0.4
Environment: JBoss 4.0.2 w/ Tomcat 5x; Liferay Portal 3.6.1; Struts 1.27; JDK
1.4.2_09; WinXP
Reporter: James Schopp
Liferay uses Struts to layout the actual portal itself, and so has message
resources stored in the request attributes under the Struts key
Globals.MESSAGES_KEY. This gets overwritten by portlets using Struts Bridges,
and causes problems later on (at leaast in Liferay) in portal rendering (since
messages can longer be found).
I have created a temporary fix in Liiferay by creating my own StrutsPortlet
subclass that saves off the messages before processRequest runs, and restores
them afterward. However, I believe this should actually be a part of the
default StrutsPortlet provided with bridges, since it could/should really
affect any portal framework (potentially).
The code is VERY simple to implement. Here is the subclass that I created: it
is obvious how to incorporate it into the base class:
<code>
package com.liferay.portal.apache.bridges;
import java.io.IOException;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.portals.bridges.struts.StrutsPortlet;
import org.apache.struts.Globals;
/**
* LiferayStrutsPortlet this portlet adds the additional functionality (over
StrutsPortlet) to restore overwritten resources.
* It works such that:
* <ul>
* <li>message resources that were in in the request BEFORE the call to
processRequest are saved restored afterward such
* as to avoid conflicts with resources used for the portal itself (and other
struts portlets)</li>
* </ul>
*
* @author James Schopp
*
*/
public class LiferayStrutsPortlet extends StrutsPortlet
{
protected void processRequest(PortletRequest request, PortletResponse
response,
String defaultPage, String requestType) throws PortletException,
IOException
{
HttpServletRequest req = getHttpServletRequest(this, request, response);
Object objMessages = req.getAttribute(Globals.MESSAGES_KEY);
try {
super.processRequest(request, response, defaultPage,
requestType);
} finally {
req.setAttribute(Globals.MESSAGES_KEY, objMessages);
}
}
}
</code>
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]