Hi guys,
Thanks, Andy! Frankly I also do not really like the term "insert"
here, because - as you said - it just does not fit that well. However
I really, really like "implements" - this is just soo much better :)
<h:commandButton ....>
<cc:implementsActionSource name="myActionSource" />
</h:commandButton>
Really beautiful!
@Leonardo: I will open an issue for this on MyFaces tomorrow and
provide some patches for it asap!
Regards,
Jakob
2010/10/29 Andy Schwartz <andy.schwartz(a)oracle.com>:
Hey Jakob -
On 10/29/10 7:02 AM, Jakob Korherr wrote:
>
> Hi,
>
> Thinking more of it and trying out some prototypes, I now think
> Leonardo's approach is the way to go. Of course, it would somehow be
> possible to circumvent the problems mentioned before (like multiple
> action listeners or the missing f: tag for client behaviors), but
> after reading the vdldocs again, I think it's much more consistent
> with what we have right now.
>
> Consider the current facet solution: The user can provide facets for
> the composite component and the author of the composite component can
> add them to implementation-components via cc:insertFacet.
Agreed. I like the consistency in this approach.
BTW, and slightly off-topic: composite:insertFacet's "name" attribute
suffers from the same problem as composite:attribute's "name" attribute:
it
is also used to refer to both the interface name as well as the
implementation name. See:
https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=631
Interestingly, the recommended solution for this is to also add a
"targetName" attribute. :-)
(This is a slightly different case, since composite:insertFacet lives in the
implementation section.)
> And this is
> exactly what we need for cc:actionSource, cc:valueHolder,
> cc:editableValueHolder and cc:clientBehavior.
>
> Thus I would propose the following new tags (from Leonardo's original
> proposal):
>
> <cc:insertActionSource name="XXX" />
> <cc:insertEditableValueHolder name="XXX"/>
> <cc:insertValueHolder name="XXX" />
> <cc:insertClientBehavior name="XXX" />
>
> What do you think?
>
I like it. :-) Though I wonder whether "insert" is the right verb to
describe what this tag is doing. In the <cc:insertFacet> case, we literally
are inserting a facet component into the component tree. In the
<cc:insertActionSource> case - we aren't really inserting an action source.
The action source is already present: it is the parent of the
<cc:insertActionSource> tag. It seems like the purpose of the
<cc:insertActionSource> tag is to identify that the parent action source
component provides the implementation of the action source that is
identified in the interface section. Perhaps the verb "implements" captures
this better than "insert"?
<composite:interface>
<composite:actionSource name="loginButton"/>
</composite:interface>
<composite:implementation>
<h:commandButton>
<composite:implementsActionSource name="loginButton"/>
</h:commandButton>
</composite:implementation>
In any case, regardless of the tag name, I think that this is a much
improved approach. Thanks for pushing this Jakob (and Leonardo, Martin and
Ganesh too)!
Andy
> Regards,
> Jakob
>
>