Hi
I tried your example and work in this way:
test page calls a composite component in level 1:
xmlns:level1="http://java.sun.com/jsf/composite/level1"
<level1:button value="test1">
<f:actionListener for="button1" binding="#{myBean.action1}"
/>
</level1:button>
level1 button passes the action listener on to level 2:
xmlns:level2="http://java.sun.com/jsf/composite/level2"
<!-- INTERFACE -->
<composite:interface>
<composite:attribute name="value"/>
<composite:actionSource name="button1" targets="button1" />
<!-- "targets" here is optional -->
</composite:interface>
<!-- IMPLEMENTATION -->
<composite:implementation>
<level2:button id="button1" value="#{cc.attrs.value}"/>
</composite:implementation>
level 2 finally consumes the action:
<!-- INTERFACE -->
<composite:interface>
<composite:attribute name="value"/>
<composite:actionSource name="button1" targets="button2" />
</composite:interface>
<!-- IMPLEMENTATION -->
<composite:implementation>
<h:commandButton id="button2" value="#{cc.attrs.value}" />
</composite:implementation>
regards,
Leonardo
2010/10/12 Leonardo Uribe <[email protected]>
> Hi
>
> I remember this one. Fortunately, MyFaces has many, many tests for
> composite
> components. It also has a test for this specific issue and it works well:
>
> testCompositeActionSource.xhtml
>
> <h:form id="testForm1">
> <testComposite:compositeActionSource>
> <f:actionListener for="button2"
> binding="#{helloWorldBean.actionListener}"/>
> </testComposite:compositeActionSource>
> </h:form>
>
> compositeActionSource.xhtml
>
> <composite:interface>
> <composite:actionSource name="button2" targets="button3"/>
> </composite:interface>
> <composite:implementation>
> <testComposite:simpleActionSource id="button3" >
> <f:actionListener for="button"
> binding="#{helloWorldBean.actionListener}"/>
> </testComposite:simpleActionSource>
> </composite:implementation>
>
> simpleActionSource.xhtml
>
> <composite:interface>
> <composite:actionSource name="button"/>
> <composite:actionSource name="button2" targets="button"/>
> </composite:interface>
> <composite:implementation>
> <h:commandButton id="button" value="Press me!" />
> </composite:implementation>
>
> The button finally should have two actionListener. Look the attribute
> "targets".
> Try set it on your example. It should work without problem.
>
> regards,
>
> Leonardo Uribe
>
>
> 2010/10/12 Jakob Korherr <[email protected]>
>
>> But anyhow, please open an issue for this. Thanks!
>>
>> Regards,
>> Jakob
>>
>> 2010/10/12 Jakob Korherr <[email protected]>:
>> > Hi Ganesh,
>> >
>> > This is a known problem of the JSF 2.0 spec, see [1]. Sadly it was
>> > (re-)targeted for 2.2.
>> >
>> > The problem is that when the ation listener is retargeted (from the
>> > composite component to the inner (implementation) component), it
>> > cannot be retargeted to another composite component, because this one
>> > does not implement ActionSource2. IMO we could try to implement a
>> > working solution already in MyFaces 2.0.x, but I don't know if this
>> > stuff is tested by the TCK..
>> >
>> > Regards,
>> > Jakob
>> >
>> > [1]
>> https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=755
>> >
>> > 2010/10/12 Ganesh <[email protected]>:
>> >> Hi,
>> >>
>> >> If my test page calls a composite component in level 1:
>> >>
>> >> xmlns:level1="http://java.sun.com/jsf/composite/level1"
>> >>
>> >> <level1:button value="test1">
>> >> <f:actionListener for="button1"
>> binding="#{myBean.action1}"
>> >> />
>> >> </level1:button>
>> >>
>> >> where level1 button passes the action listener on to level 2:
>> >>
>> >> xmlns:level2="http://java.sun.com/jsf/composite/level2"
>> >>
>> >> <!-- INTERFACE -->
>> >> <composite:interface>
>> >> <composite:attribute name="value"/>
>> >> <composite:actionSource name="button1" />
>> >> </composite:interface>
>> >>
>> >> <!-- IMPLEMENTATION -->
>> >> <composite:implementation>
>> >> <level2:button id="button1" value="#{cc.attrs.value}"/>
>> >> </composite:implementation>
>> >>
>> >> and level 2 finally consumes the action:
>> >>
>> >> <!-- INTERFACE -->
>> >> <composite:interface>
>> >> <composite:attribute name="value"/>
>> >> <composite:actionSource name="button2" />
>> >> </composite:interface>
>> >>
>> >> <!-- IMPLEMENTATION -->
>> >> <composite:implementation>
>> >> <h:commandButton id="button2" value="#{cc.attrs.value}"
>> />
>> >> </composite:implementation>
>> >>
>> >> Shouldn't this call the ActionListener returned by getAction1()? In
>> fact it
>> >> doesn't, if you agree that it should I will open an issue.
>> >>
>> >> Best regards,
>> >> Ganesh
>> >>
>> >
>> >
>> >
>> > --
>> > Jakob Korherr
>> >
>> > blog: http://www.jakobk.com
>> > twitter: http://twitter.com/jakobkorherr
>> > work: http://www.irian.at
>> >
>>
>>
>>
>> --
>> Jakob Korherr
>>
>> blog: http://www.jakobk.com
>> twitter: http://twitter.com/jakobkorherr
>> work: http://www.irian.at
>>
>
>