It seems that I am perhaps the only dissenting voice here, but I don't care for this solution.
To those of us that understand the rationale for removing targets and adding these cc:implements... tags, the new tags make perfect sense. But to the uninitiated, they will be bewildering. What does it mean for a button to "implements action source"? Buttons already implement action source.
IMO, targets are much easier to understand, and to explain.
I understand the urge to remove the targets attribute based on their OO impurity,
but I think the solution could use some more thought. There are already too many arcane oddities in JSF, whose rationale is only intuited by high priests, and I hate to see us adding more.
If this element has a method-signature attribute, the value of the targets attribute must be interpreted as a space (not tab) separated list of client ids (relative to the top level component) of components within the <composite:implementation> section. Space is used as the delimiter for compatibility with the IDREFS and NMTOKENS data types from the XML Schema. Each entry in the list must be interpreted as the id of an inner component to which the MethodExpression from the composite component tag in the using page must be applied. If this element has a method-signature attribute, but no targets attribute, the value of the name attribute is used as the single entry in the list. If the value of the name attribute is not one of the special values listed in the description of the name attribute, targets (or its derived value) need not correspond to the id of an inner component.
The name of the attribute as it must appear on the composite component tag in the using page. If the value of the name attribute is equal to (without the quotes) “action”, “actionListener”, “validator”, or “valueChangeListener”, the action described in ViewHandler.retargetMethodExpressions() must be taken to handle the attribute. In these cases, the method-signature attribute, if present, must be ignored as its value is derived as described in retargetMethodExpressions().
<composite:interface>
<composite:facet name="foo"/>
<composite:interface>
<composite:implementation>
<bar:someComp>
<composite:insertFacet name="foo"/>
</bar:someComp>
</composite:implementation>
<composite:interface>
<composite:facet name="foo" target="mySomeComp"/>
<composite:interface>
<composite:implementation>
<bar:someComp id="mySomeComp"/>
</composite:implementation>