Uploaded image for project: 'Portals Bridges (Retired)'
  1. Portals Bridges (Retired)
  2. PB-41

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

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.0
    • 1.0.1
    • struts
    • None
    • Liferay 4.0 / JBoss 4.0.2 / Struts 1.2.7 / Bridges 1.0

    Description

      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/%3C20060213165747.32184.qmail@web25002.mail.ukl.yahoo.com%3E

      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()
        Unknown macro: { return path;@@ -82,4 +86,12 @@ { this.errors = errors; }+ public ComponentContext getTilesContext()+ { + return tilesContext; + }+ public void setTilesContext(ComponentContexttilesContext)+ { + this.tilesContext = tilesContext; + } }

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

      Attachments

        Activity

          People

            ate Ate Douma
            jamesschopp James Schopp
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: