Angesichts dieser Datentabelle (natürlich funktioniert):
%Vor%Wenn ich eine benutzerdefinierte Komponente definiere (auch in der Syntax und an der richtigen Stelle unter Ressourcen / Komponenten):
%Vor%Warum funktioniert das Folgende nicht?
%Vor%Weißt du, wie ich es funktionieren lassen könnte (ich möchte meine eigene Spalte definieren und Code speichern)? Danke vielmals! Tschüss
Das Element <my:mycolumn>
muss eine Instanz von UIColumn
sein, da dies das einzige gültige Kind einer UIData
-Komponente während der Renderantwortphase ist. Alle anderen UIComponent
-Typen werden ignoriert und daher nicht gerendert. Eine zusammengesetzte Komponente ist implizit eine UINamingContaner
-Komponente, die nicht UIColumn
ist und daher ignoriert wird.
Eine PrimeFaces <p:dataTable>
mit einer Backing-Komponente, die UIColumn
erweitert, funktioniert auch nicht aufgrund des falschen Lebenszyklus einer Composite-Komponente. Die Spalte muss während der Erstellung der Ansicht erstellt werden, während der Körper der Verbundkomponente während der Renderzeit der Ansicht erstellt wird.
Die Lösung besteht darin, stattdessen eine Tag-Datei zu erstellen, was eine zusätzliche .taglib.xml
-Datei bedeutet, die jedoch einwandfrei funktioniert.
/WEB-INF/tags/column.xhtml
:
/WEB-INF/my.taglib.xml
:
Hinweis: Die <attribute>
-Einträge sind nicht obligatorisch, eignen sich jedoch für Dokumentationszwecke, z. B. für generierte Dokumente und IDE-Autocomplete.
/WEB-INF/web.xml
:
Verwendung:
%Vor%Tags und Links datatable jsf richfaces composite-component