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);
}
}