Tiles Context gets lost "Struts Bridge - error with tiles"
----------------------------------------------------------

         Key: PB-41
         URL: http://issues.apache.org/jira/browse/PB-41
     Project: Portals Bridges
        Type: Bug

  Components: struts  
 Environment: Liferay 4.0 / JBoss 4.0.2 / Struts 1.2.7 / Bridges 1.0
    Reporter: James Schopp


There is a bug where the tiles context can get lost, and using tiles in your 
struts portlet will result in an NPE.

This happened to me, and after googling the problem, it appears that it had 
also happened to Max Hammers, who also posted a patch for the error. After 
searching jira, it apears that this issue is not being tracked yet (so that's 
why I am opening this one). I manually applied the patch to my copy of the 
source files (it is very simple), and it works perfectly (thanks Max!).

So, Ate et al, please apply Max's patch!

The newsgroup posting can be found at

http://mail-archives.apache.org/mod_mbox/portals-bridges-dev/200602.mbox/[EMAIL 
PROTECTED]

And the patch is as follows (copy pasted from the above post)

##########################
Index:
src/java/org/apache/portals/bridges/struts/PortletServlet.java
===================================================================
---
src/java/org/apache/portals/bridges/struts/PortletServlet.java
(revision 365364)
+++
src/java/org/apache/portals/bridges/struts/PortletServlet.java
(working copy)
@@ -34,6 +34,7 @@
 import org.apache.struts.config.PlugInConfig;
 import org.apache.struts.tiles.TilesPlugin;
 import org.apache.struts.util.RequestUtils;
+import
org.apache.struts.taglib.tiles.ComponentConstants;
 
 /**
  * PortletServlet
@@ -169,6 +170,13 @@
                     request
                            
.setAttribute(Globals.ERROR_KEY, context
                                     .getErrors());
+                log.debug("Looking for TilesContext
...");
+                if (context.getTilesContext() !=
null) {
+                
request.setAttribute(ComponentConstants.COMPONENT_CONTEXT,
context.getTilesContext());                    
+                       log.debug("TilesContext saved in
request");
+               } else
+                       log.debug("TilesContext not found!");
+                
                 RequestDispatcher dispatcher = null;
                 if (context.getDispatchNamed())
                     dispatcher =
getServletContext().getNamedDispatcher(
Index:
src/java/org/apache/portals/bridges/struts/PortletServletRequestDispatcher.java
===================================================================
---
src/java/org/apache/portals/bridges/struts/PortletServletRequestDispatcher.java
(revision 365364)
+++
src/java/org/apache/portals/bridges/struts/PortletServletRequestDispatcher.java
(working copy)
@@ -30,6 +30,8 @@
 import org.apache.struts.action.ActionForm;
 import org.apache.struts.action.ActionMessages;
 import org.apache.struts.config.ActionConfig;
+import org.apache.struts.tiles.ComponentContext;
+import
org.apache.struts.taglib.tiles.ComponentConstants;
 
 /**
  * PortletServletRequestDispatcher
@@ -92,6 +94,11 @@
                    
.getAttribute(Globals.MESSAGE_KEY));
             context.setErrors((ActionMessages)
request
                    
.getAttribute(Globals.ERROR_KEY));
+            // Store tiles context
+           
context.setTilesContext((ComponentContext)request.getAttribute(ComponentConstants.COMPONENT_CONTEXT));
+            log.debug("TilesContext in
StrutsPortletRenderContext");
+            
+                    
             if (context.getErrors() != null)
             {
                 String originURL =
StrutsPortletURL.getOriginURL(request);
Index:
src/java/org/apache/portals/bridges/struts/StrutsPortletRenderContext.java
===================================================================
---
src/java/org/apache/portals/bridges/struts/StrutsPortletRenderContext.java
(revision 365364)
+++
src/java/org/apache/portals/bridges/struts/StrutsPortletRenderContext.java
(working copy)
@@ -19,6 +19,7 @@
 
 import org.apache.struts.action.ActionForm;
 import org.apache.struts.action.ActionMessages;
+import org.apache.struts.tiles.ComponentContext;
 
 /**
  * StrutsPortletRenderContext
@@ -34,6 +35,9 @@
     private boolean requestCancelled;
     private ActionMessages messages;
     private ActionMessages errors;
+    // Tiles context
+    private ComponentContext tilesContext;
+    
     public String getPath()
     {
         return path;
@@ -82,4 +86,12 @@
     {
         this.errors = errors;
     }
+    public ComponentContext getTilesContext()
+    {
+           return tilesContext;
+       }
+       public void setTilesContext(ComponentContext
tilesContext)
+       {
+               this.tilesContext = tilesContext;
+       }
 }

##########################

-- 
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]

Reply via email to