In JSF 1, composition components are defined using <ui:composition>. The “template” attribute of ui:composition is optional. Meaning the composition component can opt to confirm to a template or not. So these components could be classified into those that confirmed to a template and those that did not.
Type 1: Composition components that confirm to a template:
A composition component confirms to a template by specifying the template name in the template attribute (e.g: ui:composition template=”section.xtml”).  Then it overrides certain aspects of the template. In the example 1 below, section.xhtml, which is the template, defines “contents” (at 1). The composition component defined in Student.xhtml specifies section.xhtml as its template at 2. Section.xhtml further defines-its-own or overrides “contents” at 3. Had there been no 3, 4 would get rendered. 
Example 1
Section.xhtml
<ui:composition>
  <div…> …
  <ui:insert name=”contents”> 1
    This is the default text for “contents”. This text will be rendered when a component does not override this ui:insert with a ui:define name=”contents” 4
  </ui:insert>
</ui:composition>
Student.xhtml
<ui:composition template=”section.xhtml”> 2
  <ui:define name=”contents”> 3
    <h:outputText…..> <!—contents of the student section à
  </ui:define>
</ui:composition>
Type 2: Composition components that *do not* confirm to a template:
A composition component can be stand alone too. In this case the ui:composition tag will reference no template. 
outputField.xhtml
<ui:composition >
  <h:outputText
    Value=”#{fieldLabel}”/>
  <h:inputText
    Value=”#{field.property}”/>
</ui:composition >
Company.xhtml
<ui:composition …>
  <a:outputField
    fieldLabel=”Company Name”
    field=”#{company}”
    property=”name”/>
</ui:”composition>
Migrating to JSF 2:
Type 2 components above are good candidates to become composite components in JSF 2 (as composite components, like type 2 composition components, are stand-alone and confirm to no templates). 
No comments:
Post a Comment