You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2012/10/08 00:29:11 UTC

svn commit: r1395401 - in /myfaces/core/trunk: api/src/main/java/javax/faces/component/ impl/src/main/java/org/apache/myfaces/view/facelets/ impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/ impl/src/main/java/org/apache/myfaces/view/f...

Author: lu4242
Date: Sun Oct  7 22:29:10 2012
New Revision: 1395401

URL: http://svn.apache.org/viewvc?rev=1395401&view=rev
Log:
MYFACES-3619 Define a special property to specify when a component is created by facelets ( oam.vf.addedByHandler )

Modified:
    myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java
    myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAttributesMap.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentResourceTagHandler.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/ComponentSupport.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewMetadataHandler.java

Modified: myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java?rev=1395401&r1=1395400&r2=1395401&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java Sun Oct  7 22:29:10 2012
@@ -103,6 +103,7 @@ public abstract class UIComponentBase ex
     private String _rendererType;
     private String _markCreated;
     private String _facetName;
+    private boolean _addedByHandler = false;
 
     /**
      * This map holds ClientBehavior instances.
@@ -1940,7 +1941,7 @@ public abstract class UIComponentBase ex
         else
         {
             //Full
-            Object values[] = new Object[9];
+            Object values[] = new Object[10];
             values[0] = saveFacesListenersList(context);
             StateHelper stateHelper = getStateHelper(false);
             if (stateHelper != null)
@@ -1954,6 +1955,7 @@ public abstract class UIComponentBase ex
             values[6] = _markCreated;
             values[7] = _rendererType;
             values[8] = _isRendererTypeSet;
+            values[9] = _addedByHandler;
 
             return values;
         }
@@ -1989,7 +1991,7 @@ public abstract class UIComponentBase ex
         
         Object values[] = (Object[]) state;
         
-        if ( values.length == 9 && initialStateMarked())
+        if ( values.length == 10 && initialStateMarked())
         {
             //Delta mode is active, but we are restoring a full state.
             //we need to clear the initial state, to restore state without
@@ -2007,7 +2009,7 @@ public abstract class UIComponentBase ex
                         ((_AttachedDeltaWrapper) values[0]).getWrappedStateObject());
             //}
         }
-        else if (values[0] != null || (values.length == 9))
+        else if (values[0] != null || (values.length == 10))
         {
             //Full
             _facesListeners = (_DeltaList<FacesListener>)
@@ -2020,13 +2022,14 @@ public abstract class UIComponentBase ex
         
         getStateHelper().restoreState(context, values[1]);
         
-        if (values.length == 9)
+        if (values.length == 10)
         {
             _id = (String) values[4];
             _clientId = (String) values[5];
             _markCreated = (String) values[6];
             _rendererType = (String) values[7];
             _isRendererTypeSet = (Boolean) values[8];
+            _addedByHandler = (Boolean) values[9];
         }
         else if (values.length == 5)
         {
@@ -2037,7 +2040,7 @@ public abstract class UIComponentBase ex
         // rendererType needs to be restored before SystemEventListener,
         // otherwise UIComponent.getCurrentComponent(context).getRenderer(context)
         // will not work correctly
-        if (values.length == 9)
+        if (values.length == 10)
         {
             //Full restore
             restoreFullBehaviorsMap(context, values[2]);
@@ -2432,6 +2435,16 @@ public abstract class UIComponentBase ex
         _facetName = facetName;
     }
     
+    boolean isOamVfAddedByHandler()
+    {
+        return _addedByHandler;
+    }
+    
+    void setOamVfAddedByHandler(boolean addedByHandler)
+    {
+        _addedByHandler = addedByHandler;
+    }
+
 /**
      * <p>
      * This gets a single FacesContext-local shared stringbuilder instance, each time you call

Modified: myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAttributesMap.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAttributesMap.java?rev=1395401&r1=1395400&r2=1395401&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAttributesMap.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAttributesMap.java Sun Oct  7 22:29:10 2012
@@ -64,6 +64,15 @@ class _ComponentAttributesMap implements
     private final static String MARK_CREATED = "oam.vf.MARK_ID";
     
     private final static String FACET_NAME_KEY = "facelets.FACET_NAME";
+    
+    private final static String COMPONENT_ADDED_BY_HANDLER_MARKER = "oam.vf.addedByHandler";
+    
+    /**
+     * This variable works as a check to indicate the minimun lenght we need to check
+     * for the special attributes, and save some time in get(), containsKey() and 
+     * put() operations.
+     */
+    private final static int MIN_LENGHT_CHECK = MARK_CREATED.length();
 
     // The component that is read/written via this map.
     private UIComponentBase _component;
@@ -170,32 +179,40 @@ class _ComponentAttributesMap implements
         checkKey(key);
 
         int keyLength = ((String)key).length();
-        if (MARK_CREATED.length() == keyLength &&
-            MARK_CREATED.equals(key))
-        {
-            return ((UIComponentBase)_component).getOamVfMarkCreated() != null;
-        }
-        else if (FACET_NAME_KEY.length() == keyLength &&
-            FACET_NAME_KEY.equals(key))
+        if (keyLength >= MIN_LENGHT_CHECK)
         {
-            return _component.getOamVfFacetName() != null;
-        }
-        // The most common call to this method comes from UIComponent.isCompositeComponent()
-        // to reduce the impact. This is better than two lookups, once over property descriptor map
-        // and the other one from the underlying map.
-        if (Resource.COMPONENT_RESOURCE_KEY.length() == keyLength &&
-            Resource.COMPONENT_RESOURCE_KEY.equals(key))
-        {
-            if (!_isCompositeComponentSet)
+            if (MARK_CREATED.length() == keyLength &&
+                MARK_CREATED.equals(key))
+            {
+                return ((UIComponentBase)_component).getOamVfMarkCreated() != null;
+            }
+            else if (FACET_NAME_KEY.length() == keyLength &&
+                FACET_NAME_KEY.equals(key))
+            {
+                return _component.getOamVfFacetName() != null;
+            }
+            else if (COMPONENT_ADDED_BY_HANDLER_MARKER.length() == keyLength &&
+                COMPONENT_ADDED_BY_HANDLER_MARKER.equals(key))
+            {
+                return _component.isOamVfAddedByHandler();
+            }
+            // The most common call to this method comes from UIComponent.isCompositeComponent()
+            // to reduce the impact. This is better than two lookups, once over property descriptor map
+            // and the other one from the underlying map.
+            if (Resource.COMPONENT_RESOURCE_KEY.length() == keyLength &&
+                Resource.COMPONENT_RESOURCE_KEY.equals(key))
             {
-                // Note we are not setting _isCompositeComponentSet, because when the component tree is built
-                // using JSF 1.2 state saving, PostAddToViewEvent is propagated and the component is check 
-                // if is a composite component, but the state is not restored, so the check return always
-                // false. A check for processing events was added to prevent that scenario, but anyway that 
-                // makes invalid set _isCompositeComponentSet to true on this location.
-                _isCompositeComponent = getUnderlyingMap().containsKey(Resource.COMPONENT_RESOURCE_KEY);
+                if (!_isCompositeComponentSet)
+                {
+                    // Note we are not setting _isCompositeComponentSet, because when the component tree is built
+                    // using JSF 1.2 state saving, PostAddToViewEvent is propagated and the component is check 
+                    // if is a composite component, but the state is not restored, so the check return always
+                    // false. A check for processing events was added to prevent that scenario, but anyway that 
+                    // makes invalid set _isCompositeComponentSet to true on this location.
+                    _isCompositeComponent = getUnderlyingMap().containsKey(Resource.COMPONENT_RESOURCE_KEY);
+                }
+                return _isCompositeComponent;
             }
-            return _isCompositeComponent;
         }
         return getPropertyDescriptor((String) key) == null ? getUnderlyingMap().containsKey(key) : false;
     }
@@ -264,15 +281,23 @@ class _ComponentAttributesMap implements
         Object value;
 
         int keyLength = ((String)key).length();
-        if (MARK_CREATED.length() == keyLength &&
-            MARK_CREATED.equals(key))
+        if (keyLength >= MIN_LENGHT_CHECK)
         {
-            return _component.getOamVfMarkCreated();
-        }
-        else if (FACET_NAME_KEY.length() == keyLength &&
-            FACET_NAME_KEY.equals(key))
-        {
-            return _component.getOamVfFacetName();
+            if (MARK_CREATED.length() == keyLength &&
+                MARK_CREATED.equals(key))
+            {
+                return _component.getOamVfMarkCreated();
+            }
+            else if (FACET_NAME_KEY.length() == keyLength &&
+                FACET_NAME_KEY.equals(key))
+            {
+                return _component.getOamVfFacetName();
+            }
+            else if (COMPONENT_ADDED_BY_HANDLER_MARKER.length() == keyLength &&
+                COMPONENT_ADDED_BY_HANDLER_MARKER.equals(key))
+            {
+                return _component.isOamVfAddedByHandler();
+            }
         }
         // is there a javabean property to read?
         _PropertyDescriptorHolder propertyDescriptor = getPropertyDescriptor((String) key);
@@ -372,19 +397,29 @@ class _ComponentAttributesMap implements
     {
         checkKey(key);
         int keyLength = ((String)key).length();
-        if (MARK_CREATED.length() == keyLength &&
-            MARK_CREATED.equals(key))
+        if (keyLength >= MIN_LENGHT_CHECK)
         {
-            Object oldValue = _component.getOamVfMarkCreated();
-            _component.setOamVfMarkCreated(null);
-            return oldValue;
-        }
-        else if (FACET_NAME_KEY.length() == keyLength &&
-            FACET_NAME_KEY.equals(key))
-        {
-            Object oldValue = _component.getOamVfFacetName();
-            _component.setOamVfFacetName(null);
-            return oldValue;
+            if (MARK_CREATED.length() == keyLength &&
+                MARK_CREATED.equals(key))
+            {
+                Object oldValue = _component.getOamVfMarkCreated();
+                _component.setOamVfMarkCreated(null);
+                return oldValue;
+            }
+            else if (FACET_NAME_KEY.length() == keyLength &&
+                FACET_NAME_KEY.equals(key))
+            {
+                Object oldValue = _component.getOamVfFacetName();
+                _component.setOamVfFacetName(null);
+                return oldValue;
+            }
+            else if (COMPONENT_ADDED_BY_HANDLER_MARKER.length() == keyLength &&
+                COMPONENT_ADDED_BY_HANDLER_MARKER.equals(key))
+            {
+                Object oldValue = _component.isOamVfAddedByHandler();
+                _component.setOamVfAddedByHandler(false);
+                return oldValue;
+            }
         }
         _PropertyDescriptorHolder propertyDescriptor = getPropertyDescriptor((String) key);
         if (propertyDescriptor != null)
@@ -428,19 +463,30 @@ class _ComponentAttributesMap implements
         {
             throw new NullPointerException("key");
         }
-        if (MARK_CREATED.length() == key.length() &&
-            MARK_CREATED.equals(key))
+        int keyLength = ((String)key).length();
+        if (keyLength >= MIN_LENGHT_CHECK)
         {
-            String oldValue = _component.getOamVfMarkCreated();
-            _component.setOamVfMarkCreated((String)value);
-            return oldValue;
-        }
-        else if (FACET_NAME_KEY.length() == key.length() &&
-            FACET_NAME_KEY.equals(key))
-        {
-            Object oldValue = _component.getOamVfFacetName();
-            _component.setOamVfFacetName((String)value);
-            return oldValue;
+            if (MARK_CREATED.length() == keyLength &&
+                MARK_CREATED.equals(key))
+            {
+                String oldValue = _component.getOamVfMarkCreated();
+                _component.setOamVfMarkCreated((String)value);
+                return oldValue;
+            }
+            else if (FACET_NAME_KEY.length() == keyLength &&
+                FACET_NAME_KEY.equals(key))
+            {
+                Object oldValue = _component.getOamVfFacetName();
+                _component.setOamVfFacetName((String)value);
+                return oldValue;
+            }
+            else if (COMPONENT_ADDED_BY_HANDLER_MARKER.length() == keyLength &&
+                COMPONENT_ADDED_BY_HANDLER_MARKER.equals(key))
+            {
+                Object oldValue = _component.isOamVfAddedByHandler();
+                _component.setOamVfAddedByHandler((Boolean)value);
+                return oldValue;
+            }
         }
         _PropertyDescriptorHolder propertyDescriptor = getPropertyDescriptor(key);
         if (propertyDescriptor == null)
@@ -463,7 +509,7 @@ class _ComponentAttributesMap implements
         }
         // To keep this code in good shape, The fastest way to compare is look if the length first here
         // because we avoid an unnecessary cast later on equals().
-        if ( Resource.COMPONENT_RESOURCE_KEY.length() == key.length() 
+        if ( Resource.COMPONENT_RESOURCE_KEY.length() == keyLength 
              && Resource.COMPONENT_RESOURCE_KEY.equals(key))
         {
             _isCompositeComponent = true;

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java?rev=1395401&r1=1395400&r2=1395401&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java Sun Oct  7 22:29:10 2012
@@ -1173,10 +1173,7 @@ public class DefaultFaceletsStateManagem
                 if (!isRefreshOnTransientBuildPreserveState() &&
                     FaceletCompositionContext.getCurrentInstance(_facesContext) != null &&
                     (component.getAttributes().containsKey(ComponentSupport.MARK_CREATED) ||
-                     component.getAttributes().containsKey(ComponentSupport.FACET_CREATED_UIPANEL_MARKER)) ||
-                     (component.getId() != null && component.getId().length() > 16 && 
-                      component.getId().startsWith(UIViewRoot.UNIQUE_ID_PREFIX) && 
-                      component.getId().endsWith("__f_cc_facet") )
+                     component.getAttributes().containsKey(ComponentSupport.COMPONENT_ADDED_BY_HANDLER_MARKER))
                     )
                 {
                     // Components removed by facelets algorithm does not need to be registered

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentResourceTagHandler.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentResourceTagHandler.java?rev=1395401&r1=1395400&r2=1395401&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentResourceTagHandler.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentResourceTagHandler.java Sun Oct  7 22:29:10 2012
@@ -319,6 +319,8 @@ public class CompositeComponentResourceT
             compositeFacetPanel = (UIPanel)
                 faceletContext.getFacesContext().getApplication().createComponent(
                     faceletContext.getFacesContext(), UIPanel.COMPONENT_TYPE, null);
+            compositeFacetPanel.getAttributes().put(ComponentSupport.COMPONENT_ADDED_BY_HANDLER_MARKER,
+                    Boolean.TRUE);
             compositeComponentBase.getFacets().put(UIComponent.COMPOSITE_FACET_NAME, compositeFacetPanel);
             
             // Set an id to the created facet component, to prevent id generation and make

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/ComponentSupport.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/ComponentSupport.java?rev=1395401&r1=1395400&r2=1395401&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/ComponentSupport.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/ComponentSupport.java Sun Oct  7 22:29:10 2012
@@ -59,7 +59,14 @@ public final class ComponentSupport
      * This constant is duplicate in javax.faces.webapp.UIComponentClassicTagBase
      */
     public final static String FACET_CREATED_UIPANEL_MARKER = "oam.vf.createdUIPanel";
-    
+
+    /**
+     * Special myfaces core marker to indicate the component is handled by a facelet tag handler,
+     * so its creation is not handled by user programatically and PSS remove listener should
+     * not register it when a remove happens.
+     */
+    public final static String COMPONENT_ADDED_BY_HANDLER_MARKER = "oam.vf.addedByHandler";
+
     /**
      * The key under the facelet state map is stored
      */
@@ -418,6 +425,7 @@ public final class ComponentSupport
                       .append(cleanFacetName).toString()));
         }
         panel.getAttributes().put(FACET_CREATED_UIPANEL_MARKER, Boolean.TRUE);
+        panel.getAttributes().put(ComponentSupport.COMPONENT_ADDED_BY_HANDLER_MARKER, Boolean.TRUE);
         return panel;
     }
     

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewMetadataHandler.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewMetadataHandler.java?rev=1395401&r1=1395400&r2=1395401&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewMetadataHandler.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewMetadataHandler.java Sun Oct  7 22:29:10 2012
@@ -69,6 +69,7 @@ public final class ViewMetadataHandler e
                         ctx.getFacesContext(), UIPanel.COMPONENT_TYPE, null);
                 metadataFacet.setId(UIViewRoot.METADATA_FACET_NAME);
                 metadataFacet.getAttributes().put(ComponentSupport.FACET_CREATED_UIPANEL_MARKER, true);
+                metadataFacet.getAttributes().put(ComponentSupport.COMPONENT_ADDED_BY_HANDLER_MARKER, Boolean.TRUE);
                 parent.getFacets().put(UIViewRoot.METADATA_FACET_NAME, metadataFacet);
             }
         }