[jsr-314-open-mirror] [jsr-314-open] composite components: targets attribute revisited
Andy Schwartz
andy.schwartz at oracle.com
Fri Oct 29 12:23:34 EDT 2010
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
>
>
More information about the jsr-314-open-mirror
mailing list