You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ss...@apache.org on 2006/11/10 23:10:59 UTC
svn commit: r473527 - in
/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces:
context/servlet/ServletFacesContextImpl.java
portlet/MyFacesGenericPortlet.java
Author: ssilvert
Date: Fri Nov 10 14:10:58 2006
New Revision: 473527
URL: http://svn.apache.org/viewvc?view=rev&rev=473527
Log:
https://issues.apache.org/jira/browse/MYFACES-1481
Modified:
myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/servlet/ServletFacesContextImpl.java
myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/portlet/MyFacesGenericPortlet.java
Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/servlet/ServletFacesContextImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/servlet/ServletFacesContextImpl.java?view=diff&rev=473527&r1=473526&r2=473527
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/servlet/ServletFacesContextImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/context/servlet/ServletFacesContextImpl.java Fri Nov 10 14:10:58 2006
@@ -293,6 +293,11 @@
}
}
+ public boolean isReleased()
+ {
+ return _released;
+ }
+
public void release()
{
if (_released) {
Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/portlet/MyFacesGenericPortlet.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/portlet/MyFacesGenericPortlet.java?view=diff&rev=473527&r1=473526&r2=473527
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/portlet/MyFacesGenericPortlet.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/portlet/MyFacesGenericPortlet.java Fri Nov 10 14:10:58 2006
@@ -314,15 +314,22 @@
{
if (log.isTraceEnabled()) log.trace("Non-faces request: contextPath = " + request.getContextPath());
setContentType(request, response); // do this in case nonFacesRequest is called by a subclass
+
+ FacesContext facesContext = facesContext(request, response);
+ setViewRootOnFacesContext(facesContext, view);
+ lifecycle.render(facesContext);
+ }
+
+ // Set the view root on a FacesContext to prepare for rendering
+ private void setViewRootOnFacesContext(FacesContext facesContext, String view)
+ {
ApplicationFactory appFactory =
(ApplicationFactory)FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
Application application = appFactory.getApplication();
ViewHandler viewHandler = application.getViewHandler();
- FacesContext facesContext = facesContext(request, response);
UIViewRoot viewRoot = viewHandler.createView(facesContext, view);
viewRoot.setViewId(view);
facesContext.setViewRoot(viewRoot);
- lifecycle.render(facesContext);
}
protected String selectDefaultView(RenderRequest request, RenderResponse response) throws PortletException
@@ -385,11 +392,12 @@
setPortletRequestFlag(request);
+ ServletFacesContextImpl facesContext = null;
try
{
- ServletFacesContextImpl facesContext = (ServletFacesContextImpl)request.
- getPortletSession().
- getAttribute(CURRENT_FACES_CONTEXT);
+ facesContext = (ServletFacesContextImpl)request.
+ getPortletSession().
+ getAttribute(CURRENT_FACES_CONTEXT);
// depending on the Portal implementation, facesContext could be
// null after a redeploy
@@ -399,6 +407,12 @@
return;
}
+ if (facesContext.isReleased()) // processAction was not called
+ {
+ facesContext = (ServletFacesContextImpl)facesContext(request, response);
+ setViewRootOnFacesContext(facesContext, viewId);
+ }
+
// TODO: not sure if this can happen. Also double check this against spec section 2.1.3
if (facesContext.getResponseComplete()) return;
@@ -408,6 +422,12 @@
catch (Throwable e)
{
handleExceptionFromLifecycle(e);
+ }
+ finally
+ {
+ // must release the FacesContext here because it is in the
+ // session and it might get replicated in a clustered envirnoment
+ if (facesContext != null) facesContext.release();
}
}