[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