[seam-commits] Seam SVN: r7735 - in branches/Seam_2_0: ui/src/main/java/org/jboss/seam/ui/component and 1 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Fri Mar 28 09:28:31 EDT 2008


Author: pete.muir at jboss.org
Date: 2008-03-28 09:28:31 -0400 (Fri, 28 Mar 2008)
New Revision: 7735

Modified:
   branches/Seam_2_0/src/main/org/jboss/seam/jsf/SeamPhaseListener.java
   branches/Seam_2_0/ui/src/main/java/org/jboss/seam/ui/component/UISeamCommandBase.java
   branches/Seam_2_0/ui/src/main/java/org/jboss/seam/ui/util/UrlBuilder.java
   branches/Seam_2_0/ui/src/main/java/org/jboss/seam/ui/util/ViewUrlBuilder.java
Log:
backport r7261, JBSEAM-2341, JBSEAM-2784

Modified: branches/Seam_2_0/src/main/org/jboss/seam/jsf/SeamPhaseListener.java
===================================================================
--- branches/Seam_2_0/src/main/org/jboss/seam/jsf/SeamPhaseListener.java	2008-03-28 12:52:39 UTC (rev 7734)
+++ branches/Seam_2_0/src/main/org/jboss/seam/jsf/SeamPhaseListener.java	2008-03-28 13:28:31 UTC (rev 7735)
@@ -151,18 +151,28 @@
 
       FacesContext facesContext = event.getFacesContext();
       
-      if ( event.getPhaseId() == RESTORE_VIEW || event.getPhaseId() == RENDER_RESPONSE )
+      boolean notInitialised=false;
+
+      if ( event.getPhaseId() == RESTORE_VIEW )
       {
          beforeRestoreView(facesContext);
       }
+      if ( event.getPhaseId() == RENDER_RESPONSE && !Contexts.isApplicationContextActive() ) 
+      {
+          beforeRestoreView(facesContext);
+          notInitialised = true;
+      }
       
       //delegate to subclass:
       handleTransactionsBeforePhase(event);
       
-      if ( event.getPhaseId() == RENDER_RESPONSE )
+      if (event.getPhaseId() == RENDER_RESPONSE) 
       {
-         afterRestoreView(facesContext);         
-         beforeRenderResponse( event.getFacesContext() );
+         if (notInitialised) 
+         {
+            afterRestoreView(facesContext);
+         }
+         beforeRenderResponse(event.getFacesContext());
       }
    }
 
@@ -242,46 +252,47 @@
    
    private void afterPortletPhase(PhaseEvent event)
    {
-      FacesContext facesContext = event.getFacesContext();
-      
-      if ( event.getPhaseId() == RESTORE_VIEW )
+      Object portletPhase = event.getFacesContext().getExternalContext().getRequestMap().get("javax.portlet.faces.phase");
+
+      if (event.getPhaseId() == RESTORE_VIEW) 
       {
-         afterRestoreView(facesContext);
+         afterRestoreView(event.getFacesContext());
       }
-      else if ( event.getPhaseId() == INVOKE_APPLICATION )
+      else if (event.getPhaseId() == INVOKE_APPLICATION) 
       {
          afterInvokeApplication();
       }
-      else if ( event.getPhaseId() == PROCESS_VALIDATIONS )
+      else if (event.getPhaseId() == PROCESS_VALIDATIONS) 
       {
-         afterProcessValidations(facesContext);
+         afterProcessValidations(event.getFacesContext());
       }
-      
+
       FacesMessages.afterPhase();
-      
-      //delegate to subclass:
+
+      // delegate to subclass:
       handleTransactionsAfterPhase(event);
-            
-      if ( event.getPhaseId() == RENDER_RESPONSE )
+
+      if (event.getPhaseId() == RENDER_RESPONSE) 
       {
-         //writeConversationIdToResponse( facesContext.getExternalContext().getResponse() );
-         afterRenderResponse(facesContext);
+         // writeConversationIdToResponse(
+         // facesContext.getExternalContext().getResponse() );
+         afterRenderResponse(event.getFacesContext());
       }
-      else if ( event.getPhaseId() == INVOKE_APPLICATION || facesContext.getRenderResponse() || facesContext.getResponseComplete() )
+      else if ( (null != portletPhase && "ActionPhase".equals(portletPhase.toString()) )
+             && (event.getPhaseId() == INVOKE_APPLICATION
+                     || event.getFacesContext().getRenderResponse() 
+                     || event.getFacesContext().getResponseComplete()) )
       {
-         Manager manager = Manager.instance();
-         manager.beforeRedirect();
-         if ( manager.isLongRunningConversation() )
+         Manager.instance().beforeRedirect();
+         if ( Manager.instance().isLongRunningConversation() ) 
          {
-            setPortletRenderParameter(
-                  facesContext.getExternalContext().getResponse(), 
-                  manager.getConversationIdParameter(), 
-                  manager.getCurrentConversationId()
-               );
+             setPortletRenderParameter(
+                   event.getFacesContext().getExternalContext().getResponse(),
+                   Manager.instance().getConversationIdParameter(),
+                     Manager.instance().getCurrentConversationId() );
          }
-         afterResponseComplete(facesContext);
+         afterResponseComplete( event.getFacesContext() );
       }
-      
    }
    
    private static void setPortletRenderParameter(Object response, String conversationIdParameter, String conversationId)

Modified: branches/Seam_2_0/ui/src/main/java/org/jboss/seam/ui/component/UISeamCommandBase.java
===================================================================
--- branches/Seam_2_0/ui/src/main/java/org/jboss/seam/ui/component/UISeamCommandBase.java	2008-03-28 12:52:39 UTC (rev 7734)
+++ branches/Seam_2_0/ui/src/main/java/org/jboss/seam/ui/component/UISeamCommandBase.java	2008-03-28 13:28:31 UTC (rev 7735)
@@ -13,6 +13,7 @@
 import javax.faces.component.UIParameter;
 import javax.faces.context.FacesContext;
 import javax.faces.event.ActionListener;
+import javax.faces.event.PhaseEvent;
 import javax.faces.model.DataModel;
 
 import org.jboss.seam.navigation.Pages;
@@ -22,6 +23,17 @@
 public abstract class UISeamCommandBase extends UIOutput implements ActionSource2
 {
 
+   private static Class PORTLET_REQUEST;
+   
+   static
+   {
+      try
+      {
+         PORTLET_REQUEST = Class.forName("javax.portlet.PortletRequest");
+      }
+      catch (Exception e) {}
+   }
+   
    public abstract String getView();
 
    public String getUrl() throws UnsupportedEncodingException
@@ -34,7 +46,7 @@
          viewId = Pages.getViewId(getFacesContext());
       }
 
-      ViewUrlBuilder url = new ViewUrlBuilder(viewId, getFragment());
+      ViewUrlBuilder url = new ViewUrlBuilder(viewId, getFragment(), !isPortletRequest(getFacesContext()));
 
       Set<String> usedParameters = new HashSet<String>();
       for (Object child : getChildren())
@@ -203,4 +215,10 @@
       return new org.jboss.seam.ui.util.cdk.MethodExpressionToMethodBinding(getActionExpression());
    }
    
+   private static boolean isPortletRequest(FacesContext facesContext)
+   {
+      return PORTLET_REQUEST !=null && 
+            PORTLET_REQUEST.isInstance( facesContext.getExternalContext().getRequest() );
+   }
+   
 }

Modified: branches/Seam_2_0/ui/src/main/java/org/jboss/seam/ui/util/UrlBuilder.java
===================================================================
--- branches/Seam_2_0/ui/src/main/java/org/jboss/seam/ui/util/UrlBuilder.java	2008-03-28 12:52:39 UTC (rev 7734)
+++ branches/Seam_2_0/ui/src/main/java/org/jboss/seam/ui/util/UrlBuilder.java	2008-03-28 13:28:31 UTC (rev 7735)
@@ -16,6 +16,8 @@
    private String fragment;
    private String characterEncoding;
    
+   private boolean urlEncodeParameters = true;
+   
    private Map<String, String> parameters;
 
    protected UrlBuilder(String fragment, String characterEncoding)
@@ -25,12 +27,24 @@
       this.characterEncoding = characterEncoding;
    }
    
+   public UrlBuilder(String fragment, String characterEncoding, boolean urlEncodeParameters)
+   {
+      this(fragment, characterEncoding);
+      this.urlEncodeParameters = urlEncodeParameters;
+   }
+   
    public UrlBuilder(String url, String fragment, String characterEncoding)
    {
       this(fragment, characterEncoding);
       setUrl(url);
    }
    
+   public UrlBuilder(String url, String fragment, String characterEncoding, boolean urlEncodeParameters)
+   {
+      this(url, fragment, characterEncoding);
+      this.urlEncodeParameters = urlEncodeParameters;
+   }
+   
    protected void setUrl(String url)
    {
       if (url == null)
@@ -85,7 +99,7 @@
    
    public void addParameter(String name, String value) throws UnsupportedEncodingException
    {
-      parameters.put(name, urlEncode(value));
+      parameters.put(name, urlEncodeParameters ? urlEncode(value) : value);
    }
    
    public void addParameter(UIParameter parameter) throws UnsupportedEncodingException

Modified: branches/Seam_2_0/ui/src/main/java/org/jboss/seam/ui/util/ViewUrlBuilder.java
===================================================================
--- branches/Seam_2_0/ui/src/main/java/org/jboss/seam/ui/util/ViewUrlBuilder.java	2008-03-28 12:52:39 UTC (rev 7734)
+++ branches/Seam_2_0/ui/src/main/java/org/jboss/seam/ui/util/ViewUrlBuilder.java	2008-03-28 13:28:31 UTC (rev 7735)
@@ -14,9 +14,9 @@
 
    private Page page;
 
-   public ViewUrlBuilder(String viewId, String fragment)
+   public ViewUrlBuilder(String viewId, String fragment, boolean urlEncodeParameters)
    {
-      super(fragment, FacesContext.getCurrentInstance().getResponseWriter().getCharacterEncoding());
+      super(fragment, FacesContext.getCurrentInstance().getResponseWriter().getCharacterEncoding(), urlEncodeParameters);
       if (viewId == null)
       {
          throw new NullPointerException("viewId must not be null");
@@ -29,6 +29,12 @@
       
       page = Pages.instance().getPage(viewId);
    }
+   
+   public ViewUrlBuilder(String viewId, String fragment)
+   {
+      this(viewId, fragment, true);
+      
+   }
 
    @Override
    public void addParameter(UIParameter parameter) throws UnsupportedEncodingException




More information about the seam-commits mailing list