You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by ta...@apache.org on 2015/06/30 22:46:19 UTC

deltaspike git commit: DELTASPIKE-932 only render deltaspikeInitialRedirectWindowId in LAZY mode

Repository: deltaspike
Updated Branches:
  refs/heads/master f6353412d -> a16d304e6


DELTASPIKE-932 only render deltaspikeInitialRedirectWindowId in LAZY mode

Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/a16d304e
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/a16d304e
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/a16d304e

Branch: refs/heads/master
Commit: a16d304e67c26304807763aa4c95e8c0cbb83abc
Parents: f635341
Author: Thomas Andraschko <ta...@apache.org>
Authored: Tue Jun 30 22:45:11 2015 +0200
Committer: Thomas Andraschko <ta...@apache.org>
Committed: Tue Jun 30 22:46:11 2015 +0200

----------------------------------------------------------------------
 .../jsf/spi/scope/window/ClientWindow.java      |  5 ++
 .../component/window/WindowIdHtmlRenderer.java  | 58 ++++++++------------
 .../impl/scope/window/DefaultClientWindow.java  |  6 ++
 .../strategy/AbstractClientWindowStrategy.java  |  6 ++
 .../window/strategy/LazyWindowStrategy.java     | 18 ++++--
 5 files changed, 52 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/a16d304e/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/ClientWindow.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/ClientWindow.java b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/ClientWindow.java
index 8397c23..db15095 100644
--- a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/ClientWindow.java
+++ b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/ClientWindow.java
@@ -71,4 +71,9 @@ public interface ClientWindow
      * @return meta-data for the current window which should get added to URLs, null otherwise
      */
     Map<String, String> getQueryURLParameters(FacesContext facesContext);
+    
+    /**
+     * @return true if the implementation possible sends an initial redirect.
+     */
+    boolean isInitialRedirectSupported(FacesContext facesContext);
 }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/a16d304e/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
index ad992e9..6b9ce31 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
@@ -30,8 +30,8 @@ import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.deltaspike.core.api.provider.BeanProvider;
-import org.apache.deltaspike.core.spi.scope.window.WindowContext;
 import org.apache.deltaspike.jsf.impl.util.ClientWindowHelper;
+import org.apache.deltaspike.jsf.spi.scope.window.ClientWindow;
 import org.apache.deltaspike.jsf.spi.scope.window.ClientWindowConfig;
 
 @FacesRenderer(componentFamily = WindowIdComponent.COMPONENT_FAMILY, rendererType = WindowIdComponent.COMPONENT_TYPE)
@@ -40,7 +40,7 @@ import org.apache.deltaspike.jsf.spi.scope.window.ClientWindowConfig;
         @ResourceDependency(library = "javax.faces", name = "jsf.js", target = "head") } )
 public class WindowIdHtmlRenderer extends Renderer
 {
-    private volatile WindowContext windowContext;
+    private volatile ClientWindow clientWindow;
     private volatile ClientWindowConfig clientWindowConfig;
     private int maxWindowIdCount = 10;
 
@@ -57,7 +57,10 @@ public class WindowIdHtmlRenderer extends Renderer
     {
         super.encodeBegin(context, component);
 
-        String windowId = getWindowContext().getCurrentWindowId();
+        lazyInit();
+        
+        String windowId = clientWindow.getWindowId(context);
+        String clientWindowRenderMode = clientWindowConfig.getClientWindowRenderMode(context).name();
 
         //already ensured by DefaultClientWindow
         //just to ensure that we don't get a security issue in case of a customized client-window implementation
@@ -67,59 +70,44 @@ public class WindowIdHtmlRenderer extends Renderer
             windowId = windowId.substring(0, this.maxWindowIdCount);
         }
 
-        String mode = getClientWindowConfig().getClientWindowRenderMode(context).name();
-
         ResponseWriter writer = context.getResponseWriter();
         writer.startElement("script", component);
         writer.writeAttribute("type", "text/javascript", null);
         writer.write("window.deltaspikeWindowId='" + windowId + "';");
-        writer.write("window.deltaspikeClientWindowRenderMode='" + mode + "';");
+        writer.write("window.deltaspikeClientWindowRenderMode='" + clientWindowRenderMode + "';");
         
         // see #729
-        Object cookie = ClientWindowHelper.getRequestWindowIdCookie(context, windowId);
-        if (cookie != null && cookie instanceof Cookie)
+        if (clientWindow.isInitialRedirectSupported(context))
         {
-            Cookie servletCookie = (Cookie) cookie;
-            writer.write("window.deltaspikeInitialRedirectWindowId='" + servletCookie.getValue() + "';");
-            
-            // expire/remove cookie
-            servletCookie.setMaxAge(0);
-            ((HttpServletResponse) context.getExternalContext().getResponse()).addCookie(servletCookie);
+            Object cookie = ClientWindowHelper.getRequestWindowIdCookie(context, windowId);
+            if (cookie != null && cookie instanceof Cookie)
+            {
+                Cookie servletCookie = (Cookie) cookie;
+                writer.write("window.deltaspikeInitialRedirectWindowId='" + servletCookie.getValue() + "';");
+
+                // expire/remove cookie
+                servletCookie.setMaxAge(0);
+                ((HttpServletResponse) context.getExternalContext().getResponse()).addCookie(servletCookie);
+            }
         }
 
         writer.endElement("script");
     }
 
-    private WindowContext getWindowContext()
+    private void lazyInit()
     {
-        if (windowContext == null)
+        if (clientWindow == null)
         {
             synchronized (this)
             {
-                if (windowContext == null)
+                if (clientWindow == null)
                 {
-                    windowContext = BeanProvider.getContextualReference(WindowContext.class);
+                    clientWindowConfig = BeanProvider.getContextualReference(ClientWindowConfig.class);
+                    clientWindow = BeanProvider.getContextualReference(ClientWindow.class);
                     maxWindowIdCount = ClientWindowHelper.getMaxWindowIdLength();
                 }
             }
         }
-
-        return windowContext;
     }
-    
-    private ClientWindowConfig getClientWindowConfig()
-    {
-        if (clientWindowConfig == null)
-        {
-            synchronized (this)
-            {
-                if (clientWindowConfig == null)
-                {
-                    clientWindowConfig = BeanProvider.getContextualReference(ClientWindowConfig.class);
-                }
-            }
-        }
 
-        return clientWindowConfig;
-    }
 }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/a16d304e/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/DefaultClientWindow.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/DefaultClientWindow.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/DefaultClientWindow.java
index 2db4b7e..b517af9 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/DefaultClientWindow.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/DefaultClientWindow.java
@@ -87,6 +87,12 @@ public class DefaultClientWindow implements ClientWindow
     {
         return getClientWindow(facesContext).getQueryURLParameters(facesContext);
     }
+    
+    @Override
+    public boolean isInitialRedirectSupported(FacesContext facesContext)
+    {
+        return getClientWindow(facesContext).isInitialRedirectSupported(facesContext);
+    }
 
     protected ClientWindow getClientWindow(FacesContext facesContext)
     {

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/a16d304e/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/AbstractClientWindowStrategy.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/AbstractClientWindowStrategy.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/AbstractClientWindowStrategy.java
index 7009dd4..af956a2 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/AbstractClientWindowStrategy.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/AbstractClientWindowStrategy.java
@@ -174,6 +174,12 @@ public abstract class AbstractClientWindowStrategy implements ClientWindow
     }
 
     @Override
+    public boolean isInitialRedirectSupported(FacesContext facesContext)
+    {
+        return false;
+    }
+    
+    @Override
     public Map<String, String> getQueryURLParameters(FacesContext facesContext)
     {
         Map<String, String> cachedParameters =

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/a16d304e/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/LazyWindowStrategy.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/LazyWindowStrategy.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/LazyWindowStrategy.java
index 794a1bc..6121628 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/LazyWindowStrategy.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/LazyWindowStrategy.java
@@ -66,12 +66,6 @@ public class LazyWindowStrategy extends AbstractClientWindowStrategy
     }
 
     @Override
-    protected boolean isSupportClientWindowRenderingMode()
-    {
-        return true;
-    }
-
-    @Override
     protected Map<String, String> createQueryURLParameters(FacesContext facesContext)
     {
         String windowId = getWindowId(facesContext);
@@ -85,4 +79,16 @@ public class LazyWindowStrategy extends AbstractClientWindowStrategy
         parameters.put(ClientWindowHelper.RequestParameters.GET_WINDOW_ID, windowId);
         return parameters;
     }
+    
+    @Override
+    protected boolean isSupportClientWindowRenderingMode()
+    {
+        return true;
+    }
+
+    @Override
+    public boolean isInitialRedirectSupported(FacesContext facesContext)
+    {
+        return true;
+    }
 }