Umgebung
- EE7
- JSF 2.2
Mit diesem Post möchte ich einige Hinweise zu den Composite Componentes von JSF geben, die immer wieder gefragt werden.
Zugriff auf Attribute des Interfaces
Auf Attribute des Interfaces wird über #{cc.attrs.<Name aus dem Interface>} zugegriffen.
Rendered und id verhalten sich seltsam
Composite Componentes leiten sich aus UINamingContainer und UIComponentBase ab. Daher dürfen und sollen einige Attribute wie rendered oder id nicht überschrieben werden. Diese stehen bereits durch die Ableitung zur Verfügung und können direkt übergeben werden.
Parameter an action oder actionListener binden
Sollen Methoden für action oder actionListener übergeben werden, müssen im Interface die Signaturen angegeben werden z.B.
<cc:attribute name="action" required="true" method-signature="java.lang.String action()" /> <cc:attribute name="actionListener" required="true" method-signature="void actionListener(javax.faces.event.ActionEvent)" />
Werden diese Attribute in der Komponente an action oder actionListener von entsprechenden Komponenten (z.B. h:actionButton) gebunden, dürfen sie nicht leer sein. Es sollte also required=“true“ verwendet werden. Alternativ müssen in der Komponente verschiedene Varianten umgesetzt und über z.B. rendered=“not empty cc.attrs.action“ ein- und ausgeblendet werden.
Einbinden von Kindernkomponenten
Kindelemente aus den HTML-Seiten werden über <cc:insertChildren /> eingefügt.