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 2011/08/14 20:10:31 UTC

svn commit: r1157590 - /myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAttributesMap.java

Author: lu4242
Date: Sun Aug 14 18:10:30 2011
New Revision: 1157590

URL: http://svn.apache.org/viewvc?rev=1157590&view=rev
Log:
MYFACES-3279 composite component default values for method expressions cannot be evaluated on attribute map

Modified:
    myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAttributesMap.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=1157590&r1=1157589&r2=1157590&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 Aug 14 18:10:30 2011
@@ -283,8 +283,33 @@ class _ComponentAttributesMap implements
                             {
                                 if (attribute.getName().equals(key))
                                 {
-                                    value = attribute.getValue("default");
-                                    break;
+                                    String attributeName = attribute.getName();
+                                    boolean isKnownMethod = "action".equals(attributeName) || "actionListener".equals(attributeName)  
+                                            || "validator".equals(attributeName) || "valueChangeListener".equals(attributeName);
+                                    
+                                    // <composite:attribute> method-signature attribute is 
+                                    // ValueExpression that must evaluate to String
+                                    ValueExpression methodSignatureExpression
+                                            = (ValueExpression) attribute.getValue("method-signature");
+                                    String methodSignature = null;
+                                    if (methodSignatureExpression != null)
+                                    {
+                                        // Check if the value expression holds a method signature
+                                        // Note that it could be null, so in that case we don't have to do anything
+                                        methodSignature = (String) methodSignatureExpression.getValue(_component.getFacesContext().getELContext());
+                                    }
+                                    
+                                    // either the attributeName has to be a knownMethod or there has to be a method-signature
+                                    if (isKnownMethod || methodSignature != null)
+                                    {
+                                        //In this case it is expecting a ValueExpression
+                                        return attribute.getValue("default");
+                                    }
+                                    else
+                                    {
+                                        value = attribute.getValue("default");
+                                        break;
+                                    }
                                 }
                             }
                             // We have to check for a ValueExpression and also evaluate it