You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ja...@apache.org on 2010/04/27 16:17:01 UTC
svn commit: r938466 - in /myfaces/core/trunk:
api/src/main/java/javax/faces/component/_ComponentAttributesMap.java
impl/src/main/java/org/apache/myfaces/el/unified/resolver/CompositeComponentELResolver.java
Author: jakobk
Date: Tue Apr 27 14:17:01 2010
New Revision: 938466
URL: http://svn.apache.org/viewvc?rev=938466&view=rev
Log:
MYFACES-2677 Adapt CompositeComponentAttributesMapWrapper to changes from MYFACES-2633
Modified:
myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAttributesMap.java
myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/el/unified/resolver/CompositeComponentELResolver.java
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=938466&r1=938465&r2=938466&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 Tue Apr 27 14:17:01 2010
@@ -33,7 +33,6 @@ import java.util.WeakHashMap;
import javax.el.ValueExpression;
import javax.faces.FacesException;
-import javax.faces.application.Resource;
import javax.faces.context.FacesContext;
/**
@@ -244,17 +243,6 @@ class _ComponentAttributesMap implements
ValueExpression ve = _component.getValueExpression((String) key);
if (ve != null)
{
- //if (getUnderlyingMap().get ("org.apache.myfaces.COMPOSITE_COMPONENT_GET_VALUE_EXPRESSION") != null)
- //{
- // FIXME: this is "technically" a hack for the composite component attribute
- // EL resolver. #{cc.attrs} is supposed to wrap this map and call getValue()
- // and setValue() on the ValueExpressions it returns... but the spec says that
- // this method always needs to evaluate ValueExpressions, and therefore the EL
- // resolver never even gets to see ValuExpressions.
-
- // return ve;
- //}
-
value = ve.getValue(FacesContext.getCurrentInstance().getELContext());
}
else
@@ -265,15 +253,6 @@ class _ComponentAttributesMap implements
}
}
- // The get() method of the Map must take the following additional action if this component instance is a
- // composite component instance (indicated by the presence of a component attribute under the key given
- // by the value of Resource.COMPONENT_RESOURCE_KEY)
- // if (value instanceof ValueExpression && getUnderlyingMap().containsKey(Resource.COMPONENT_RESOURCE_KEY))
- //{
- // call the ValueExpression.getValue(javax.el.ELContext) method and return the result from get().
- // value = ((ValueExpression)value).getValue(FacesContext.getCurrentInstance().getELContext());
- //}
-
// Otherwise, return the actual value from the get() method.
return value;
}
Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/el/unified/resolver/CompositeComponentELResolver.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/el/unified/resolver/CompositeComponentELResolver.java?rev=938466&r1=938465&r2=938466&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/el/unified/resolver/CompositeComponentELResolver.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/el/unified/resolver/CompositeComponentELResolver.java Tue Apr 27 14:17:01 2010
@@ -184,9 +184,8 @@ public final class CompositeComponentELR
}
// Wrapper map for composite component attributes. Follows spec, section 5.6.2.2, table 5-11.
- //
- private final class CompositeComponentAttributesMapWrapper implements CompositeComponentExpressionHolder,
- Map<String, Object>
+ private final class CompositeComponentAttributesMapWrapper
+ implements CompositeComponentExpressionHolder, Map<String, Object>
{
private final UIComponent _component;
@@ -208,8 +207,8 @@ public final class CompositeComponentELR
{
ValueExpression valueExpr = _component.getValueExpression(name);
- return ((valueExpr instanceof ValueExpression) ? (ValueExpression) valueExpr
- : null);
+ return ((valueExpr instanceof ValueExpression)
+ ? (ValueExpression) valueExpr : null);
}
public void clear()
@@ -234,20 +233,17 @@ public final class CompositeComponentELR
public Object get(Object key)
{
- Object obj = getAsValueExpression (key);
-
- // Per the spec, if the result is a ValueExpression, evaluate it and return the value.
-
+ Object obj = _originalMap.get(key);
if (obj != null)
{
- if (obj instanceof ValueExpression)
- {
- return ((ValueExpression) obj).getValue(_elContext);
- }
- else
- {
- return obj;
- }
+ // _originalMap is a _ComponentAttributesMap and thus any
+ // ValueExpressions will be evaluated by the call to
+ // _originalMap.get(). The only case in which we really will
+ // get a ValueExpression here is when a ValueExpression itself
+ // is stored as an attribute. But in this case we really want to
+ // get the ValueExpression. So we don't have to evaluate possible
+ // ValueExpressions here, but can return obj directly.
+ return obj;
}
else
{
@@ -259,6 +255,9 @@ public final class CompositeComponentELR
break;
}
}
+ // We have to check for a ValueExpression and also evaluate it
+ // here, because in the PropertyDescriptor the default values are
+ // always stored as (Tag-)ValueExpressions.
if (obj != null && obj instanceof ValueExpression)
{
return ((ValueExpression) obj).getValue(_elContext);
@@ -270,28 +269,6 @@ public final class CompositeComponentELR
}
}
- private Object getAsValueExpression (Object key)
- {
- Object obj;
-
- // FIXME: this is a hack, but I think it's necessary. The component attributes map
- // that this class wraps requires that all ValueExpressions be evaluated before they're
- // returned, but the get() and put() methods defined in this class rely on ValueExpressions
- // being returned so the underlying beans (if specified) can be updated with new values.
- // This may be something to notify the EG about.
-
- // The presence of this attribute will tell the component attributes map not to evaluate
- // ValueExpressions.
-
- //_originalMap.put (COMPOSITE_COMPONENT_GET_VALUE_EXPRESSION, Boolean.TRUE);
-
- obj = _originalMap.get (key);
-
- //_originalMap.remove (COMPOSITE_COMPONENT_GET_VALUE_EXPRESSION);
-
- return obj;
- }
-
public boolean isEmpty()
{
return _originalMap.isEmpty();
@@ -304,20 +281,18 @@ public final class CompositeComponentELR
public Object put(String key, Object value)
{
- Object obj = getAsValueExpression (key);
-
+ ValueExpression valueExpression = _component.getValueExpression(key);
+
// Per the spec, if the result is a ValueExpression, call setValue().
-
- if ((obj != null) && (obj instanceof ValueExpression))
+ if (valueExpression != null)
{
- ((ValueExpression) obj).setValue(_elContext, value);
+ valueExpression.setValue(_elContext, value);
return null;
}
- // TODO: spec doesn't say. I assume we just delegate instead of returning null...
- // -= Leonardo Uribe =- Really this map is used to resolve ValueExpressions
- // like #{cc.attrs.somekey}, so the value returned is not expected to be used,
+ // Really this map is used to resolve ValueExpressions like
+ // #{cc.attrs.somekey}, so the value returned is not expected to be used,
// but is better to delegate to keep the semantic of this method.
return _originalMap.put(key, value);
}