[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