[jboss-svn-commits] JBL Code SVN: r8340 - labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Dec 15 07:40:57 EST 2006


Author: unibrew
Date: 2006-12-15 07:40:56 -0500 (Fri, 15 Dec 2006)
New Revision: 8340

Modified:
   labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumsJSFPortlet.java
Log:
[JBFORUMS-115] Fixing bug which caused NPE to be thrown when accessing permament link after session invalidates or by different browser.

Modified: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumsJSFPortlet.java
===================================================================
--- labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumsJSFPortlet.java	2006-12-15 11:36:46 UTC (rev 8339)
+++ labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumsJSFPortlet.java	2006-12-15 12:40:56 UTC (rev 8340)
@@ -25,24 +25,22 @@
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.fileupload.portlet.PortletFileUpload;
 
-//myfaces
-import org.apache.myfaces.portlet.MyFacesGenericPortlet;
-
 import java.io.IOException;
-
 import java.lang.reflect.Field;
-
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
-
-//portlet api
 import java.util.Map;
-
 import java.util.TreeMap;
 
+// JSF
+import javax.faces.component.UIViewRoot;
 import javax.faces.context.FacesContext;
 
+//myfaces
+import org.apache.myfaces.portlet.MyFacesGenericPortlet;
+
+//portlet api
 import javax.portlet.ActionRequest;
 import javax.portlet.ActionResponse;
 import javax.portlet.RenderRequest;
@@ -209,23 +207,34 @@
     /**
      * Called by the portlet container to allow the portlet to process an action request.
      */
-    public void processAction(ActionRequest request, ActionResponse response) throws PortletException,IOException
-    { 
+    public void processAction(ActionRequest request, ActionResponse response) throws PortletException,IOException {
+    
+        /* DEBUG CODE
+        Map map = request.getParameterMap();
+        Iterator it = map.keySet().iterator();
+        while (it.hasNext()) {
+            String key = (String)it.next();
+            System.out.println("KEY: "+key+" VALUE: "+((String[])map.get(key))[0]);
+        }
+        */
+        
         try
         {
-            if (sessionTimedOut(request)) return;
-            setPortletRequestFlag(request);
+            if (sessionTimedOut(request)) {
+                return;
+            }
             
+            setPortletRequestFlag(request);    
+            
             this.setupRenderParameters(request,response);   
-            
+        
             //parse and setup any attachments if they are sent in
             if ((request.getContentType() != null) && request.getContentType().startsWith("multipart/form-data"))
             {
                 this.processAttachments(request,response);
             }
-
+            
             FacesContext fc = facesContext(request, response);
-
             lifecycle.execute(fc);
 
             if (fc.getResponseComplete()==false)
@@ -243,9 +252,8 @@
                         viewName = viewName.replaceAll("xhtml","jsf");
                     }
                     response.setRenderParameter(VIEW, new String[]{getIdForName(viewName)} );
-                }
+                } 
             }
-
             request.getPortletSession().setAttribute(CURRENT_FACES_CONTEXT, fc);
         }
         catch(Throwable t)
@@ -259,8 +267,15 @@
      */
     public void doView(RenderRequest request,RenderResponse response) throws PortletException,IOException
     {
+        FacesContext fc = facesContext(request, response);
+        if (request.getPortletSession().getAttribute(CURRENT_FACES_CONTEXT) == null) { 
+            request.getPortletSession().setAttribute(CURRENT_FACES_CONTEXT,fc);
+        }
+        
         try
         {
+            FacesContext facesContext = facesContext(request,response);
+            
             //make sure this is not a mode change from Edit
             boolean modeChanged = ((Boolean)request.getAttribute("isPortletModeChanged")).booleanValue();
             if(modeChanged)
@@ -269,20 +284,38 @@
                 nonFacesRequest(request,response,"/views/index.jsf");
                 return;
             }
+            
             Map map = request.getParameterMap();
+            Map newParams = new HashMap();  
+            newParams.putAll(map);            
             
+            if (facesContext.getViewRoot()==null) {
+                facesContext.setViewRoot(new UIViewRoot());
+            }
+            
             if (map.get(VIEW)!=null) {
-                Map newParams = new HashMap();  
-                newParams.putAll(map);
                 String viewName = ((String[])newParams.get(VIEW))[0];
                 newParams.put(MyFacesGenericPortlet.VIEW_ID,new String[]{getNameForId(viewName)});
-                Class requestClass = PortletRequestImpl.class;
-                Field field = requestClass.getDeclaredField("parameters");
-                field.setAccessible(true);
-                field.set(request, new Parameters(newParams));
-                field.setAccessible(false);
+                facesContext.getViewRoot().setViewId(getNameForId(viewName));
             }
+
+            Class requestClass = PortletRequestImpl.class;
+            Field field = requestClass.getDeclaredField("parameters");
+            field.setAccessible(true);
+            field.set(request, new Parameters(newParams));
+            field.setAccessible(false);
             
+            if (fc.getViewRoot()==null) {
+                if (fc.getViewRoot()==null && newParams.get(VIEW)!=null) {
+                    fc.setViewRoot(new UIViewRoot());
+                    String viewName = ((String[])newParams.get(VIEW))[0];
+                    fc.getViewRoot().setViewId(getNameForId(viewName));
+                }
+                setPortletRequestFlag(request);                
+                
+                lifecycle.execute(fc);
+            }
+            
             super.doView(request,response);
         }
         catch(Throwable t)




More information about the jboss-svn-commits mailing list