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/07/06 00:28:02 UTC
[2/2] deltaspike git commit: DELTASPIKE-935 ds:disableClientWindow
should also disable JSF 2.2 rendering mode
DELTASPIKE-935 ds:disableClientWindow should also disable JSF 2.2 rendering mode
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/70c42ca9
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/70c42ca9
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/70c42ca9
Branch: refs/heads/master
Commit: 70c42ca9d58cc659d46de2decd871e362c0eed12
Parents: 7139478
Author: Thomas Andraschko <ta...@apache.org>
Authored: Mon Jul 6 00:26:56 2015 +0200
Committer: Thomas Andraschko <ta...@apache.org>
Committed: Mon Jul 6 00:26:56 2015 +0200
----------------------------------------------------------------------
.../jsf/api/config/JsfModuleConfig.java | 76 +++++++++++++-------
.../window/DisableClientWindowHtmlRenderer.java | 48 +++++++++----
.../JsfClientWindowAwareLifecycleWrapper.java | 3 +-
.../impl/scope/window/ClientWindowAdapter.java | 39 ++++++++--
.../strategy/AbstractClientWindowStrategy.java | 26 +++++++
.../strategy/DelegatedWindowStrategy.java | 26 ++-----
6 files changed, 150 insertions(+), 68 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/70c42ca9/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/JsfModuleConfig.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/JsfModuleConfig.java b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/JsfModuleConfig.java
index f754d44..92972de 100644
--- a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/JsfModuleConfig.java
+++ b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/JsfModuleConfig.java
@@ -38,7 +38,9 @@ public class JsfModuleConfig implements DeltaSpikeConfig
private static final long serialVersionUID = -487295181899986237L;
- protected Boolean delegatedWindowHandlingEnabled;
+ private volatile Boolean initialized;
+ private boolean delegatedWindowHandlingEnabled;
+ private boolean jsf22Available;
protected JsfModuleConfig()
{
@@ -111,10 +113,7 @@ public class JsfModuleConfig implements DeltaSpikeConfig
*/
public ClientWindowConfig.ClientWindowRenderMode getDefaultWindowMode()
{
- if (this.delegatedWindowHandlingEnabled == null)
- {
- lazyInitDelegatedWindowHandlingEnabled();
- }
+ lazyInit();
if (this.delegatedWindowHandlingEnabled)
{
@@ -123,16 +122,6 @@ public class JsfModuleConfig implements DeltaSpikeConfig
return null;
}
- protected synchronized void lazyInitDelegatedWindowHandlingEnabled()
- {
- if (this.delegatedWindowHandlingEnabled != null)
- {
- return;
- }
-
- this.delegatedWindowHandlingEnabled = isDelegatedWindowHandlingEnabled();
- }
-
/**
* Defines the {@link javax.enterprise.Qualifier} which will be used to fire the
* {@link org.apache.deltaspike.core.api.exception.control.event.ExceptionToCatchEvent}
@@ -150,22 +139,57 @@ public class JsfModuleConfig implements DeltaSpikeConfig
return true;
}
- protected boolean isDelegatedWindowHandlingEnabled()
+ public boolean isJsf22Available()
{
- if (ClassUtils.tryToLoadClassForName(CLIENT_WINDOW_CLASS_NAME) == null)
+ lazyInit();
+
+ return this.jsf22Available;
+ }
+
+ public boolean isDelegatedWindowHandlingEnabled()
+ {
+ lazyInit();
+
+ return this.delegatedWindowHandlingEnabled;
+ }
+
+ private void lazyInit()
+ {
+ if (this.initialized == null)
{
- return false;
+ init();
}
+ }
- FacesContext facesContext = FacesContext.getCurrentInstance();
-
- if (facesContext == null) // can happen in case of a very simple test-setup without a mocked jsf container
+ protected synchronized void init()
+ {
+ if (this.initialized == null)
{
- return false;
+ this.jsf22Available = ClassUtils.tryToLoadClassForName(CLIENT_WINDOW_CLASS_NAME) != null;
+
+ if (!this.jsf22Available)
+ {
+ this.delegatedWindowHandlingEnabled = false;
+ }
+ else
+ {
+ FacesContext facesContext = FacesContext.getCurrentInstance();
+
+ // can happen in case of a very simple test-setup without a mocked jsf container
+ if (facesContext == null)
+ {
+ this.delegatedWindowHandlingEnabled = false;
+ }
+ else
+ {
+
+ String initParam = facesContext.getExternalContext().getInitParameter(CLIENT_WINDOW_CONFIG_KEY);
+ this.delegatedWindowHandlingEnabled =
+ !(initParam == null || "none".equalsIgnoreCase(initParam.trim()));
+ }
+ }
+
+ this.initialized = true;
}
- String configuredWindowHandling = facesContext.getExternalContext()
- .getInitParameter(CLIENT_WINDOW_CONFIG_KEY);
-
- return !(configuredWindowHandling == null || "none".equalsIgnoreCase(configuredWindowHandling.trim()));
}
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/70c42ca9/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/DisableClientWindowHtmlRenderer.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/DisableClientWindowHtmlRenderer.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/DisableClientWindowHtmlRenderer.java
index f4a3fb0..29ddd50 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/DisableClientWindowHtmlRenderer.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/DisableClientWindowHtmlRenderer.java
@@ -24,24 +24,41 @@ import javax.faces.context.FacesContext;
import javax.faces.render.FacesRenderer;
import javax.faces.render.Renderer;
import org.apache.deltaspike.core.api.provider.BeanProvider;
+import org.apache.deltaspike.jsf.api.config.JsfModuleConfig;
+import org.apache.deltaspike.jsf.impl.scope.window.ClientWindowAdapter;
import org.apache.deltaspike.jsf.spi.scope.window.ClientWindow;
@FacesRenderer(componentFamily = DisableClientWindowComponent.COMPONENT_FAMILY,
rendererType = DisableClientWindowComponent.COMPONENT_TYPE)
public class DisableClientWindowHtmlRenderer extends Renderer
{
- private volatile ClientWindow clientWindow;
+ private volatile Boolean initialized;
+
+ private ClientWindow clientWindow;
+ private JsfModuleConfig jsfModuleConfig;
@Override
public void encodeChildren(FacesContext context, UIComponent component) throws IOException
{
- boolean clientWindowRenderModeEnabled = getClientWindow().isClientWindowRenderModeEnabled(context);
-
+ lazyInit();
+
+ boolean clientWindowRenderModeEnabled = clientWindow.isClientWindowRenderModeEnabled(context);
+
+ if (jsfModuleConfig.isJsf22Available())
+ {
+ Boolean jsfClientWindowRenderModeEnabled =
+ ClientWindowAdapter.isJsf22ClientWindowRenderModeEnabled(context);
+ if (jsfClientWindowRenderModeEnabled != null)
+ {
+ clientWindowRenderModeEnabled = clientWindowRenderModeEnabled || jsfClientWindowRenderModeEnabled;
+ }
+ }
+
try
{
if (clientWindowRenderModeEnabled)
{
- getClientWindow().disableClientWindowRenderMode(context);
+ clientWindow.disableClientWindowRenderMode(context);
}
super.encodeChildren(context, component);
@@ -50,7 +67,7 @@ public class DisableClientWindowHtmlRenderer extends Renderer
{
if (clientWindowRenderModeEnabled)
{
- getClientWindow().enableClientWindowRenderMode(context);
+ clientWindow.enableClientWindowRenderMode(context);
}
}
}
@@ -61,19 +78,20 @@ public class DisableClientWindowHtmlRenderer extends Renderer
return true;
}
- private ClientWindow getClientWindow()
+ private void lazyInit()
{
- if (clientWindow == null)
+ if (this.initialized == null)
{
- synchronized (this)
- {
- if (clientWindow == null)
- {
- clientWindow = BeanProvider.getContextualReference(ClientWindow.class);
- }
- }
+ init();
}
+ }
- return clientWindow;
+ protected synchronized void init()
+ {
+ if (this.initialized == null)
+ {
+ clientWindow = BeanProvider.getContextualReference(ClientWindow.class);
+ jsfModuleConfig = BeanProvider.getContextualReference(JsfModuleConfig.class);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/70c42ca9/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/request/JsfClientWindowAwareLifecycleWrapper.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/request/JsfClientWindowAwareLifecycleWrapper.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/request/JsfClientWindowAwareLifecycleWrapper.java
index 43de06e..1bb6db4 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/request/JsfClientWindowAwareLifecycleWrapper.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/request/JsfClientWindowAwareLifecycleWrapper.java
@@ -87,7 +87,8 @@ public class JsfClientWindowAwareLifecycleWrapper extends LifecycleWrapper
if (!facesContext.getResponseComplete() && !"default".equals(windowId))
{
- facesContext.getExternalContext().setClientWindow(new ClientWindowAdapter(clientWindow));
+ facesContext.getExternalContext().setClientWindow(
+ new ClientWindowAdapter(clientWindow, delegateWindowHandling));
}
}
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/70c42ca9/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/ClientWindowAdapter.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/ClientWindowAdapter.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/ClientWindowAdapter.java
index 29dc539..0a61a68 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/ClientWindowAdapter.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/ClientWindowAdapter.java
@@ -34,23 +34,34 @@ import java.util.Map;
public class ClientWindowAdapter extends ClientWindow
{
private final org.apache.deltaspike.jsf.spi.scope.window.ClientWindow window;
+ private final boolean delegateWindowHandling;
- public ClientWindowAdapter(org.apache.deltaspike.jsf.spi.scope.window.ClientWindow window)
+ public ClientWindowAdapter(org.apache.deltaspike.jsf.spi.scope.window.ClientWindow window,
+ boolean delegateWindowHandling)
{
this.window = window;
+ this.delegateWindowHandling = delegateWindowHandling;
}
- public static String getWindowIdFromJsf(FacesContext facesContext)
+ public static Boolean isJsf22ClientWindowRenderModeEnabled(FacesContext context)
{
- ClientWindow clientWindow = facesContext.getExternalContext().getClientWindow();
-
+ ClientWindow clientWindow = context.getExternalContext().getClientWindow();
if (clientWindow != null)
{
- return clientWindow.getId();
+ if (clientWindow instanceof ClientWindowAdapter)
+ {
+ ClientWindowAdapter clientWindowAdapter = (ClientWindowAdapter) clientWindow;
+ return clientWindowAdapter.isOriginalClientWindowRenderModeEnabled(context);
+ }
+ else
+ {
+ return clientWindow.isClientWindowRenderModeEnabled(context);
+ }
}
+
return null;
}
-
+
@Override
public void decode(FacesContext context)
{
@@ -69,4 +80,20 @@ public class ClientWindowAdapter extends ClientWindow
//currently not needed by the window-handling of DeltaSpike
return Collections.emptyMap();
}
+
+ @Override
+ public boolean isClientWindowRenderModeEnabled(FacesContext context)
+ {
+ if (!delegateWindowHandling)
+ {
+ return false;
+ }
+
+ return super.isClientWindowRenderModeEnabled(context);
+ }
+
+ protected boolean isOriginalClientWindowRenderModeEnabled(FacesContext context)
+ {
+ return super.isClientWindowRenderModeEnabled(context);
+ }
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/70c42ca9/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 af956a2..f3b9eca 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
@@ -27,6 +27,7 @@ import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import org.apache.deltaspike.core.spi.scope.window.WindowContext;
import org.apache.deltaspike.jsf.api.config.JsfModuleConfig;
+import org.apache.deltaspike.jsf.impl.scope.window.ClientWindowAdapter;
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;
@@ -144,6 +145,14 @@ public abstract class AbstractClientWindowStrategy implements ClientWindow
Map<Object, Object> attrMap = facesContext.getAttributes();
attrMap.put(PER_USE_CLIENT_WINDOW_URL_QUERY_PARAMETER_DISABLED_KEY, Boolean.TRUE);
}
+
+ if (jsfModuleConfig.isJsf22Available())
+ {
+ if (facesContext.getExternalContext().getClientWindow() != null)
+ {
+ facesContext.getExternalContext().getClientWindow().disableClientWindowRenderMode(facesContext);
+ }
+ }
}
@Override
@@ -154,11 +163,28 @@ public abstract class AbstractClientWindowStrategy implements ClientWindow
Map<Object, Object> attrMap = facesContext.getAttributes();
attrMap.remove(PER_USE_CLIENT_WINDOW_URL_QUERY_PARAMETER_DISABLED_KEY);
}
+
+ if (jsfModuleConfig.isJsf22Available())
+ {
+ if (facesContext.getExternalContext().getClientWindow() != null)
+ {
+ facesContext.getExternalContext().getClientWindow().enableClientWindowRenderMode(facesContext);
+ }
+ }
}
@Override
public boolean isClientWindowRenderModeEnabled(FacesContext facesContext)
{
+ // skip dswid rendering if JSF2.2 render mode is disabled
+ if (jsfModuleConfig.isJsf22Available())
+ {
+ if (ClientWindowAdapter.isJsf22ClientWindowRenderModeEnabled(facesContext) == false)
+ {
+ return false;
+ }
+ }
+
if (isSupportClientWindowRenderingMode())
{
Map<Object, Object> attrMap = facesContext.getAttributes();
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/70c42ca9/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/DelegatedWindowStrategy.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/DelegatedWindowStrategy.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/DelegatedWindowStrategy.java
index af7bd43..2cb4b37 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/DelegatedWindowStrategy.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/strategy/DelegatedWindowStrategy.java
@@ -21,7 +21,6 @@ package org.apache.deltaspike.jsf.impl.scope.window.strategy;
import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Typed;
import javax.faces.context.FacesContext;
-import org.apache.deltaspike.jsf.impl.scope.window.ClientWindowAdapter;
@Dependent
@Typed(DelegatedWindowStrategy.class)
@@ -30,24 +29,11 @@ public class DelegatedWindowStrategy extends AbstractClientWindowStrategy
@Override
protected String getOrCreateWindowId(FacesContext facesContext)
{
- return ClientWindowAdapter.getWindowIdFromJsf(facesContext);
- }
-
- @Override
- public void disableClientWindowRenderMode(FacesContext facesContext)
- {
- facesContext.getExternalContext().getClientWindow().disableClientWindowRenderMode(facesContext);
- }
-
- @Override
- public void enableClientWindowRenderMode(FacesContext facesContext)
- {
- facesContext.getExternalContext().getClientWindow().enableClientWindowRenderMode(facesContext);
- }
-
- @Override
- public boolean isClientWindowRenderModeEnabled(FacesContext facesContext)
- {
- return facesContext.getExternalContext().getClientWindow().isClientWindowRenderModeEnabled(facesContext);
+ if (facesContext.getExternalContext().getClientWindow() != null)
+ {
+ return facesContext.getExternalContext().getClientWindow().getId();
+ }
+
+ return null;
}
}