[jsr-314-open] composite:insertFacet target facet name
Andy Schwartz
andy.schwartz at oracle.com
Tue Sep 15 19:29:22 EDT 2009
Gang -
As currently specified, composite:insertFacet's "name" attribute serves
two purposes:
1. It identifies the name of the facet on the containing composite
component to insert.
2. It identifies the name of the facet on the target component into
which the facet is being inserted.
As a result, the name of the facet exposed by the composite component
must match the name of the facet on the implementation component into
which the facet is being inserted. So, for example, if I have a
composite component as follows:
<composite:interface>
<composite:facet name="caption"/>
</composite:interface>
<composite:implementation>
<h:panelGrid>
<composite:insertFacet name="caption"/>
</h:panelGrid>
</composite:implementation>
Everything is happy, since both the composite component and the
h:panelGrid expose a "caption" facet.
However, if I want to define a composite components with two h:panelGrid
components and two captions:
<composite:interface>
<composite:facet name="caption"/>
<composite:facet name="backupCaption"/>
</composite:interface>
<composite:implementation>
<h:panelGrid>
<composite:insertFacet name="caption"/>
</h:panelGrid>
<h:panelGrid>
<!-- Uh oh. -->
<composite:insertFacet name="backupCaption"/>
</h:panelGrid>
</composite:implementation>
I am out of luck, since I now have a mismatch between the composite
component facet name and the h:panelGrid facet name. Or, at least, I
think I am out of luck... Am I missing some way to handle this use case?
If the spec does not yet provide a solution for this, I think that we
could/should solve this in one of two ways:
1. Add an attribute to composite:insertFacet that allows a target facet
name to be specified:
<h:panelGrid>
<composite:insertFacet name="backupCaption" targetName="caption"/>
</h:panelGrid>
2. Specify that the target facet name can be picked up from a wrapping
<f:facet> tag:
<h:panelGrid>
<f:facet name="caption">
<composite:insertFacet name="backupCaption"/>
</f:facet>
</h:panelGrid>
I prefer #2 since is consistent with typical facet usage.
Thoughts?
BTW, this seems like a fairly severe limitation to me. Is there any
chance that we can correct this by spec'ing the behavior from #2 in the
next MR? Of course, I am not sure what the rules are for MRs... In
this case we aren't so much adding new APIs (no new attributes/tags) so
much as specifying behavior for a particular use of existing APIs
(<composite:insertFacet> inside of <f:facet>) that was previously
unspecified.
Andy
More information about the jsr-314-open-mirror
mailing list