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/18 19:53:47 UTC

svn commit: r1159328 - in /myfaces/core/trunk/impl/src: main/java/org/apache/myfaces/view/facelets/ main/java/org/apache/myfaces/view/facelets/tag/composite/ test/java/org/apache/myfaces/view/facelets/tag/composite/ test/resources/org/apache/myfaces/vi...

Author: lu4242
Date: Thu Aug 18 17:53:46 2011
New Revision: 1159328

URL: http://svn.apache.org/viewvc?rev=1159328&view=rev
Log:
MYFACES-3285 cc:attribute targetAttributeName does not work well on nested cases and combinations of "targets" and EL expressions

Added:
    myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/compositeAttributeActionMethodExpressionTarget3.xhtml
    myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/simpleAttributeActionMethodExpressionTarget3.xhtml
    myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testCompositeAttributeActionMethodExpressionTarget3.xhtml
    myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testSimpleAttributeActionMethodExpressionTarget3.xhtml
Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/RetargetMethodExpressionRule.java
    myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentMethodExpressionTestCase.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java?rev=1159328&r1=1159327&r2=1159328&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletViewDeclarationLanguage.java Thu Aug 18 17:53:46 2011
@@ -937,8 +937,8 @@ public class FaceletViewDeclarationLangu
             }
             
             String attributeName = propertyDescriptor.getName();
-            boolean isKnownMethod = "action".equals(attributeName) || "actionListener".equals(attributeName)  
-                    || "validator".equals(attributeName) || "valueChangeListener".equals(attributeName);
+            //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
@@ -952,8 +952,26 @@ public class FaceletViewDeclarationLangu
                 methodSignature = (String) methodSignatureExpression.getValue(elContext);
             }
             
+            String targetAttributeName = null;
+            ValueExpression targetAttributeNameVE = (ValueExpression)propertyDescriptor.getValue("targetAttributeName");
+            if (targetAttributeNameVE != null)
+            {
+                targetAttributeName = (String) targetAttributeNameVE.getValue(context.getELContext());
+                if (targetAttributeName == null)
+                {
+                    targetAttributeName = attributeName;
+                }
+            }
+            else
+            {
+                targetAttributeName = attributeName;
+            }
+            
+            boolean isKnownTargetAttributeMethod = "action".equals(targetAttributeName) || "actionListener".equals(targetAttributeName)  
+                || "validator".equals(targetAttributeName) || "valueChangeListener".equals(targetAttributeName);
+            
             // either the attributeName has to be a knownMethod or there has to be a method-signature
-            if (isKnownMethod || methodSignature != null)
+            if (isKnownTargetAttributeMethod || methodSignature != null)
             {
                 ValueExpression targetsExpression = 
                     (ValueExpression) propertyDescriptor.getValue("targets");
@@ -1029,24 +1047,6 @@ public class FaceletViewDeclarationLangu
                                 CompositeComponentELUtils.isCompositeComponentAttrsMethodExpression(
                                 attributeNameValueExpression.getExpressionString());
 
-                    String targetAttributeName = null;
-                    ValueExpression targetAttributeNameVE = (ValueExpression)propertyDescriptor.getValue("targetAttributeName");
-                    if (targetAttributeNameVE != null)
-                    {
-                        targetAttributeName = (String) targetAttributeNameVE.getValue(context.getELContext());
-                        if (targetAttributeName == null)
-                        {
-                            targetAttributeName = attributeName;
-                        }
-                    }
-                    else
-                    {
-                        targetAttributeName = attributeName;
-                    }
-                    
-                    boolean isKnownTargetAttributeMethod = "action".equals(targetAttributeName) || "actionListener".equals(targetAttributeName)  
-                        || "validator".equals(targetAttributeName) || "valueChangeListener".equals(targetAttributeName);
-                    
                     if (isKnownTargetAttributeMethod)
                     {
                         // To add support to #{cc.attrs.action}, #{cc.attrs.actionListener}, #{cc.attrs.validator} or
@@ -1055,7 +1055,7 @@ public class FaceletViewDeclarationLangu
                         // org.apache.myfaces.view.facelets.tag.composite.RetargetMethodExpressionRule already put
                         // a ValueExpression, so we only need to put a MethodExpression when a non redirecting
                         // expression is used (for example when a nested #{cc.attrs.xxx} is used).
-                        if ("action".equals(attributeName))
+                        if ("action".equals(targetAttributeName))
                         {
                             // target is ActionSource2
                             methodExpression = reWrapMethodExpression(context.getApplication().getExpressionFactory().
@@ -1070,7 +1070,7 @@ public class FaceletViewDeclarationLangu
                             }
                             // Otherwise keep the current ValueExpression, because it will be used chain other value expressions
                         }
-                        else if ("actionListener".equals(attributeName))
+                        else if ("actionListener".equals(targetAttributeName))
                         {
                             // target is ActionSource2
                             methodExpression = reWrapMethodExpression(context.getApplication().getExpressionFactory().
@@ -1089,7 +1089,7 @@ public class FaceletViewDeclarationLangu
                             }
                             // Otherwise keep the current ValueExpression, because it will be used chain other value expressions
                         }
-                        else if ("validator".equals(attributeName))
+                        else if ("validator".equals(targetAttributeName))
                         {
                             // target is EditableValueHolder
                             methodExpression = reWrapMethodExpression(context.getApplication().getExpressionFactory().
@@ -1105,7 +1105,7 @@ public class FaceletViewDeclarationLangu
                             }
                             // Otherwise keep the current ValueExpression, because it will be used chain other value expressions
                         }
-                        else if ("valueChangeListener".equals(attributeName))
+                        else if ("valueChangeListener".equals(targetAttributeName))
                         {
                             // target is EditableValueHolder
                             methodExpression = reWrapMethodExpression(context.getApplication().getExpressionFactory().
@@ -1352,8 +1352,8 @@ public class FaceletViewDeclarationLangu
 
                 if (attributeName.equals(propertyDescriptor.getName()))
                 {
-                    boolean isKnownMethod = "action".equals(attributeName) || "actionListener".equals(attributeName)  
-                    || "validator".equals(attributeName) || "valueChangeListener".equals(attributeName);
+                    //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
@@ -1367,22 +1367,40 @@ public class FaceletViewDeclarationLangu
                         methodSignature = (String) methodSignatureExpression.getValue(elContext);
                     }
                     
+                    String targetAttributeName = null;
+                    ValueExpression targetAttributeNameVE = (ValueExpression)propertyDescriptor.getValue("targetAttributeName");
+                    if (targetAttributeNameVE != null)
+                    {
+                        targetAttributeName = (String) targetAttributeNameVE.getValue(context.getELContext());
+                        if (targetAttributeName == null)
+                        {
+                            targetAttributeName = attributeName;
+                        }
+                    }
+                    else
+                    {
+                        targetAttributeName = attributeName;
+                    }
+                    
+                    boolean isKnownTargetAttributeMethod = "action".equals(targetAttributeName) || "actionListener".equals(targetAttributeName)  
+                        || "validator".equals(targetAttributeName) || "valueChangeListener".equals(targetAttributeName);
+                    
                     // either the attributeName has to be a knownMethod or there has to be a method-signature
-                    if (isKnownMethod || methodSignature != null)
+                    if (isKnownTargetAttributeMethod || methodSignature != null)
                     {
-                        if ("action".equals(attributeName))
+                        if ("action".equals(targetAttributeName))
                         {
                             return !(component instanceof ActionSource2);
                         }
-                        else if ("actionListener".equals(attributeName))
+                        else if ("actionListener".equals(targetAttributeName))
                         {
                             return !(component instanceof ActionSource2);
                         }
-                        else if ("validator".equals(attributeName))
+                        else if ("validator".equals(targetAttributeName))
                         {
                             return !(component instanceof EditableValueHolder);
                         }
-                        else if ("valueChangeListener".equals(attributeName))
+                        else if ("valueChangeListener".equals(targetAttributeName))
                         {
                             return !(component instanceof EditableValueHolder);
                         }

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/RetargetMethodExpressionRule.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/RetargetMethodExpressionRule.java?rev=1159328&r1=1159327&r2=1159328&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/RetargetMethodExpressionRule.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/RetargetMethodExpressionRule.java Thu Aug 18 17:53:46 2011
@@ -22,6 +22,7 @@ import java.beans.PropertyDescriptor;
 
 import javax.el.ValueExpression;
 import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
 import javax.faces.view.facelets.FaceletContext;
 import javax.faces.view.facelets.MetaRule;
 import javax.faces.view.facelets.Metadata;
@@ -87,6 +88,22 @@ final class RetargetMethodExpressionRule
                 {
                     return new RetargetValueExpressionMapper(attribute, name);
                 }
+                
+                ValueExpression targetAttributeNameVE = 
+                    (ValueExpression)propertyDescriptor.getValue("targetAttributeName");
+                if (targetAttributeNameVE != null)
+                {
+                    return new RetargetValueExpressionMapper(attribute, name);
+                }
+                
+                //if there is a targets declaration, is a retarget without doubt
+                ValueExpression targets = 
+                    (ValueExpression)propertyDescriptor.getValue("targets");
+                
+                if (targets != null)
+                {
+                    return new RetargetValueExpressionMapper(attribute, name);
+                }
             }
         }
         return null;

Modified: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentMethodExpressionTestCase.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentMethodExpressionTestCase.java?rev=1159328&r1=1159327&r2=1159328&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentMethodExpressionTestCase.java (original)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentMethodExpressionTestCase.java Thu Aug 18 17:53:46 2011
@@ -411,6 +411,35 @@ public class CompositeComponentMethodExp
         Assert.assertEquals(bean.doSomeAction(), testComponentNoTarget.getActionExpression().invoke(facesContext.getELContext(), null));
         compositeComponent.popComponentFromEL(facesContext);
     }
+    
+    @Test
+    public void testSimpleActionMethodExpressionTarget3() throws Exception
+    {
+        MockAttributeBean bean = new MockAttributeBean();
+        
+        facesContext.getExternalContext().getRequestMap().put("bean",
+                bean);
+        
+        UIViewRoot root = facesContext.getViewRoot();
+        vdl.buildView(facesContext, root, "testSimpleAttributeActionMethodExpressionTarget3.xhtml");
+
+        
+        UIComponent panelGroup1 = root.findComponent("testGroup1");
+        Assert.assertNotNull(panelGroup1);
+        UINamingContainer compositeComponent = (UINamingContainer) panelGroup1.getChildren().get(0);
+        Assert.assertNotNull(compositeComponent);
+        UICommand testComponent = (UICommand) compositeComponent.findComponent("testComponent");
+        Assert.assertNotNull(testComponent);
+        Assert.assertNotNull(testComponent.getActionExpression());
+        Assert.assertEquals(bean.doSomeAction(), testComponent.getActionExpression().invoke(facesContext.getELContext(), null));
+        
+        UICommand testComponentNoTarget = (UICommand) compositeComponent.findComponent("testComponentNoTarget");
+        Assert.assertNotNull(testComponentNoTarget);
+        Assert.assertNotNull(testComponentNoTarget.getActionExpression());
+        compositeComponent.pushComponentToEL(facesContext, compositeComponent);
+        Assert.assertEquals(bean.doSomeAction(), testComponentNoTarget.getActionExpression().invoke(facesContext.getELContext(), null));
+        compositeComponent.popComponentFromEL(facesContext);
+    }
 
     @Test
     public void testCompositeActionMethodExpressionTarget2() throws Exception
@@ -493,5 +522,60 @@ public class CompositeComponentMethodExp
         compositeComponent3.popComponentFromEL(facesContext);
         compositeComponent.popComponentFromEL(facesContext);
     }
+    
+    @Test
+    public void testCompositeActionMethodExpressionTarget3() throws Exception
+    {
+        MockAttributeBean bean = new MockAttributeBean();
+        
+        facesContext.getExternalContext().getRequestMap().put("bean",
+                bean);
+        
+        UIViewRoot root = facesContext.getViewRoot();
+        vdl.buildView(facesContext, root, "testCompositeAttributeActionMethodExpressionTarget3.xhtml");
+
+        
+        UIComponent panelGroup1 = root.findComponent("testGroup1");
+        Assert.assertNotNull(panelGroup1);
+        UINamingContainer compositeComponent = (UINamingContainer) panelGroup1.getChildren().get(0);
+        Assert.assertNotNull(compositeComponent);
+        
+        UINamingContainer compositeComponent2 = (UINamingContainer) compositeComponent.findComponent("simpleAttributeMethodExpressionTarget");
+        Assert.assertNotNull(compositeComponent2);
+        UICommand testComponent = (UICommand) compositeComponent2.findComponent("testComponent");
+        Assert.assertNotNull(testComponent);
+        Assert.assertNotNull(testComponent.getActionExpression());
+        Assert.assertEquals(bean.doSomeAction(), testComponent.getActionExpression().invoke(facesContext.getELContext(), null));
+
+        UICommand testComponentNoTarget = (UICommand) compositeComponent2.findComponent("testComponentNoTarget");
+        Assert.assertNotNull(testComponentNoTarget);
+        Assert.assertNotNull(testComponentNoTarget.getActionExpression());
+        compositeComponent.pushComponentToEL(facesContext, compositeComponent);
+        compositeComponent2.pushComponentToEL(facesContext, compositeComponent2);
+        Assert.assertEquals(bean.doSomeAction(), testComponentNoTarget.getActionExpression().invoke(facesContext.getELContext(), null));
+        compositeComponent2.popComponentFromEL(facesContext);
+        compositeComponent.popComponentFromEL(facesContext);
+        
+        UINamingContainer compositeComponent3 = (UINamingContainer) compositeComponent.findComponent("simpleAttributeMethodExpressionNoTarget");
+        Assert.assertNotNull(compositeComponent3);
+        UICommand testComponent3 = (UICommand) compositeComponent3.findComponent("testComponent");
+        Assert.assertNotNull(testComponent3);
+        Assert.assertNotNull(testComponent3.getActionExpression());
+        compositeComponent.pushComponentToEL(facesContext, compositeComponent);
+        compositeComponent3.pushComponentToEL(facesContext, compositeComponent3);
+        Assert.assertEquals(bean.doSomeAction(), testComponent3.getActionExpression().invoke(facesContext.getELContext(), null));
+        compositeComponent3.popComponentFromEL(facesContext);
+        compositeComponent.popComponentFromEL(facesContext);
+        
+        UICommand testComponentNoTarget3 = (UICommand) compositeComponent3.findComponent("testComponentNoTarget");
+        Assert.assertNotNull(testComponentNoTarget3);
+        Assert.assertNotNull(testComponentNoTarget3.getActionExpression());
+        compositeComponent.pushComponentToEL(facesContext, compositeComponent);
+        compositeComponent3.pushComponentToEL(facesContext, compositeComponent3);
+        Assert.assertEquals(bean.doSomeAction(), testComponentNoTarget3.getActionExpression().invoke(facesContext.getELContext(), null));
+        compositeComponent3.popComponentFromEL(facesContext);
+        compositeComponent.popComponentFromEL(facesContext);
+    }
+
 
 }

Added: myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/compositeAttributeActionMethodExpressionTarget3.xhtml
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/compositeAttributeActionMethodExpressionTarget3.xhtml?rev=1159328&view=auto
==============================================================================
--- myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/compositeAttributeActionMethodExpressionTarget3.xhtml (added)
+++ myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/compositeAttributeActionMethodExpressionTarget3.xhtml Thu Aug 18 17:53:46 2011
@@ -0,0 +1,34 @@
+<!--
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ $Id: defineInclude.xml 804043 2009-08-13 22:08:44Z lu4242 $
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:composite="http://java.sun.com/jsf/composite"
+    xmlns:tc="http://myfaces.apache.org/testComponent"
+    xmlns:testComposite="http://java.sun.com/jsf/composite/testComposite">
+<head>
+</head>
+<body>
+<composite:interface>
+    <composite:attribute name="submitAction" targets="simpleAttributeMethodExpressionTarget" targetAttributeName="action"/>
+</composite:interface>
+<composite:implementation>
+    <testComposite:simpleAttributeActionMethodExpressionTarget2 id="simpleAttributeMethodExpressionTarget"/>
+    <testComposite:simpleAttributeActionMethodExpressionTarget2 id="simpleAttributeMethodExpressionNoTarget" action="#{cc.attrs.submitAction}"/>
+</composite:implementation>
+</body>
+</html>
\ No newline at end of file

Added: myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/simpleAttributeActionMethodExpressionTarget3.xhtml
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/simpleAttributeActionMethodExpressionTarget3.xhtml?rev=1159328&view=auto
==============================================================================
--- myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/simpleAttributeActionMethodExpressionTarget3.xhtml (added)
+++ myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/simpleAttributeActionMethodExpressionTarget3.xhtml Thu Aug 18 17:53:46 2011
@@ -0,0 +1,33 @@
+<!--
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ $Id: defineInclude.xml 804043 2009-08-13 22:08:44Z lu4242 $
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:composite="http://java.sun.com/jsf/composite"
+    xmlns:tc="http://myfaces.apache.org/testComponent">
+<head>
+</head>
+<body>
+<composite:interface>
+    <composite:attribute name="submitAction" targets="testComponent" targetAttributeName="action"/>
+</composite:interface>
+<composite:implementation>
+    <h:commandButton id="testComponent" value="Press Me!"/>
+    <h:commandButton id="testComponentNoTarget" value="Press Me!" action="#{cc.attrs.submitAction}"/>
+</composite:implementation>
+</body>
+</html>
\ No newline at end of file

Added: myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testCompositeAttributeActionMethodExpressionTarget3.xhtml
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testCompositeAttributeActionMethodExpressionTarget3.xhtml?rev=1159328&view=auto
==============================================================================
--- myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testCompositeAttributeActionMethodExpressionTarget3.xhtml (added)
+++ myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testCompositeAttributeActionMethodExpressionTarget3.xhtml Thu Aug 18 17:53:46 2011
@@ -0,0 +1,29 @@
+<!--
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ $Id: defineInclude.xml 804043 2009-08-13 22:08:44Z lu4242 $
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:testComposite="http://java.sun.com/jsf/composite/testComposite">
+<head>
+</head>
+<body>
+<h:panelGroup id="testGroup1">
+<testComposite:compositeAttributeActionMethodExpressionTarget3 submitAction="#{bean.doSomeAction}">
+</testComposite:compositeAttributeActionMethodExpressionTarget3>
+</h:panelGroup>
+</body>
+</html>
\ No newline at end of file

Added: myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testSimpleAttributeActionMethodExpressionTarget3.xhtml
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testSimpleAttributeActionMethodExpressionTarget3.xhtml?rev=1159328&view=auto
==============================================================================
--- myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testSimpleAttributeActionMethodExpressionTarget3.xhtml (added)
+++ myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testSimpleAttributeActionMethodExpressionTarget3.xhtml Thu Aug 18 17:53:46 2011
@@ -0,0 +1,29 @@
+<!--
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ $Id: defineInclude.xml 804043 2009-08-13 22:08:44Z lu4242 $
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:testComposite="http://java.sun.com/jsf/composite/testComposite">
+<head>
+</head>
+<body>
+<h:panelGroup id="testGroup1">
+<testComposite:simpleAttributeActionMethodExpressionTarget3 submitAction="#{bean.doSomeAction}">
+</testComposite:simpleAttributeActionMethodExpressionTarget3>
+</h:panelGroup>
+</body>
+</html>
\ No newline at end of file