Wie erstelle ich eine zusammengesetzte Komponente für eine Datentabelle?

9

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

    
Federico 11.07.2012, 19:21
quelle

1 Antwort

24

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 :

%Vor%

/WEB-INF/my.taglib.xml :

%Vor%

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 :

%Vor%

Verwendung:

%Vor%     
BalusC 12.07.2012, 02:45
quelle