You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2011/04/17 00:26:34 UTC
svn commit: r1094071 - in
/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl:
component/ listener/request/ security/
Author: gpetracek
Date: Sat Apr 16 22:26:33 2011
New Revision: 1094071
URL: http://svn.apache.org/viewvc?rev=1094071&view=rev
Log:
EXTCDI-167 workaround for PreDestroyViewMapEvent which would be caused by the security check
Removed:
myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/component/
Modified:
myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/TemporaryViewRootAwareApplicationWrapper.java
myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/security/SecurityAwareViewHandler.java
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/TemporaryViewRootAwareApplicationWrapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/TemporaryViewRootAwareApplicationWrapper.java?rev=1094071&r1=1094070&r2=1094071&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/TemporaryViewRootAwareApplicationWrapper.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/TemporaryViewRootAwareApplicationWrapper.java Sat Apr 16 22:26:33 2011
@@ -18,19 +18,14 @@
*/
package org.apache.myfaces.extensions.cdi.jsf2.impl.listener.request;
-import org.apache.myfaces.extensions.cdi.core.impl.util.CodiUtils;
-import org.apache.myfaces.extensions.cdi.jsf2.impl.component.DefaultTemporaryUIViewRoot;
-import org.apache.myfaces.extensions.cdi.jsf2.impl.component.spi.TemporaryUIViewRoot;
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
+import org.apache.myfaces.extensions.cdi.jsf2.impl.security.SecurityAwareViewHandler;
+
import javax.faces.application.Application;
import javax.faces.application.ApplicationWrapper;
-import javax.faces.application.Resource;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
-import javax.faces.el.ValueBinding;
+import javax.faces.event.PreDestroyViewMapEvent;
+import javax.faces.event.SystemEvent;
//needed due to EXTCDI-167
/**
@@ -53,91 +48,22 @@ class TemporaryViewRootAwareApplicationW
return this.wrapped;
}
- protected UIComponent tryToWrapUIViewRoot(UIComponent uiComponent)
- {
- if(uiComponent instanceof UIViewRoot)
- {
- if(!uiComponent.getClass().getName().equals(UIViewRoot.class.getName()))
- {
- return getCustomizedUIViewRoot(uiComponent);
- }
- return new DefaultTemporaryUIViewRoot();
- }
- return uiComponent;
- }
-
- private UIComponent getCustomizedUIViewRoot(UIComponent uiComponent)
- {
- TemporaryUIViewRoot temporaryComponent = CodiUtils.lookupFromEnvironment(TemporaryUIViewRoot.class);
-
- if(temporaryComponent instanceof UIComponent)
- {
- return (UIComponent)temporaryComponent;
- }
- return uiComponent;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public UIComponent createComponent(FacesContext context,
- Resource componentResource)
- {
- return tryToWrapUIViewRoot(super.createComponent(context, componentResource));
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public UIComponent createComponent(FacesContext context,
- String componentType,
- String rendererType)
- {
- return tryToWrapUIViewRoot(super.createComponent(context, componentType, rendererType));
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public UIComponent createComponent(String componentType) throws FacesException
- {
- return tryToWrapUIViewRoot(super.createComponent(componentType));
- }
-
/**
* {@inheritDoc}
*/
@Override
- public UIComponent createComponent(ValueBinding componentBinding,
- FacesContext context,
- String componentType) throws FacesException
+ public void publishEvent(FacesContext facesContext, Class<? extends SystemEvent> systemEventClass, Object source)
{
- return tryToWrapUIViewRoot(super.createComponent(componentBinding, context, componentType));
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public UIComponent createComponent(ValueExpression componentExpression,
- FacesContext context,
- String componentType,
- String rendererType)
- {
- return tryToWrapUIViewRoot(super.createComponent(componentExpression, context, componentType, rendererType));
+ if(!PreDestroyViewMapEvent.class.isAssignableFrom(systemEventClass) ||
+ isPreDestroyViewMapEventAllowed(facesContext))
+ {
+ super.publishEvent(facesContext, systemEventClass, source);
+ }
}
- /**
- * {@inheritDoc}
- */
- @Override
- public UIComponent createComponent(ValueExpression componentExpression,
- FacesContext contexte,
- String componentType) throws FacesException
+ private boolean isPreDestroyViewMapEventAllowed(FacesContext facesContext)
{
- return tryToWrapUIViewRoot(super.createComponent(componentExpression, contexte, componentType));
+ return !Boolean.TRUE.equals(
+ facesContext.getExternalContext().getRequestMap().get(SecurityAwareViewHandler.class.getName()));
}
}
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/security/SecurityAwareViewHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/security/SecurityAwareViewHandler.java?rev=1094071&r1=1094070&r2=1094071&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/security/SecurityAwareViewHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/security/SecurityAwareViewHandler.java Sat Apr 16 22:26:33 2011
@@ -18,8 +18,6 @@
*/
package org.apache.myfaces.extensions.cdi.jsf2.impl.security;
-import org.apache.myfaces.extensions.cdi.jsf2.impl.component.spi.TemporaryUIViewRoot;
-
import javax.faces.application.ViewHandler;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
@@ -46,9 +44,9 @@ public class SecurityAwareViewHandler
* see EXTCDI-167
*/
@Override
- public UIViewRoot createView(FacesContext context, String viewId)
+ public UIViewRoot createView(FacesContext facesContext, String viewId)
{
- UIViewRoot originalViewRoot = context.getViewRoot();
+ UIViewRoot originalViewRoot = facesContext.getViewRoot();
UIViewRoot newViewRoot;
Map<String, Object> viewMap = null;
@@ -63,18 +61,12 @@ public class SecurityAwareViewHandler
}
}
- if(originalViewRoot instanceof TemporaryUIViewRoot)
- {
- //workaround for PreDestroyViewMapEvent which would be caused by the security check
- ((TemporaryUIViewRoot)originalViewRoot).setTemporaryMode(true);
- }
+ //workaround for PreDestroyViewMapEvent which would be caused by the security check
+ deactivatePreDestroyViewMapEvent(facesContext);
- newViewRoot = super.createView(context, viewId);
+ newViewRoot = super.createView(facesContext, viewId);
- if(originalViewRoot instanceof TemporaryUIViewRoot)
- {
- ((TemporaryUIViewRoot)originalViewRoot).setTemporaryMode(false);
- }
+ activatePreDestroyViewMapEvent(facesContext);
if(viewMap != null)
{
@@ -82,4 +74,14 @@ public class SecurityAwareViewHandler
}
return newViewRoot;
}
+
+ private void deactivatePreDestroyViewMapEvent(FacesContext facesContext)
+ {
+ facesContext.getExternalContext().getRequestMap().put(SecurityAwareViewHandler.class.getName(), Boolean.TRUE);
+ }
+
+ private void activatePreDestroyViewMapEvent(FacesContext facesContext)
+ {
+ facesContext.getExternalContext().getRequestMap().put(SecurityAwareViewHandler.class.getName(), Boolean.FALSE);
+ }
}