Tipps zu JSF Composite Componentes


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.

Du hast Fragen oder Anmerkungen? Kontakt: arndt@schoenb.de