2013-01-31 15 views
11

Ich habe verwendet UI: Wiederholen, um Tabellen zu generieren. Mit ui: wiederhole es ist einfach, die Zeilen mit der Nummer varStatus nummeriert zu bekommen. Ich bin abhängig von den Zeilen-IDs aus varStatus, wenn ich die Backing-Bean anrufe, um die Navigation in der Liste zu übernehmen, z. B. um ein Element in der Liste nach oben oder unten zu verschieben.JSF 2 dataTable Zeilenindex ohne dataModel

Jetzt möchte ich eine zusammengesetzte Komponente erstellen, die eine anpassbare Tabelle mit allen erforderlichen Funktionen zum Markieren von Zeilen, Verschieben von oben/unten etc. Um dies zu tun, funktioniert die ui: wiederholen nicht so gut ich kann ' t eine Möglichkeit sehen, mit einer unterschiedlichen Anzahl von Spalten umzugehen; Ich muss Überschriften an einer Stelle und die Stelle in einer anderen angeben (und ich habe nicht den Wissenspunkt erreicht, an dem ich eine benutzerdefinierte Komponente erstellen kann). Daher ging ich stattdessen zu Datatable über, indem ich die Header als Facetten an der gleichen Stelle wie den Body-Inhalt spezifiziere.

Das funktionierte gut, bis ich bemerkte, dass es aus irgendeinem Grund keine varStatus mehr gab. Ich habe eine Menge Arbeit in die Handhabung der Listenpräsentation gesteckt, ohne eine datamodel zu benötigen, und ich möchte nicht damit anfangen. Gibt es eine Möglichkeit, die aktuelle Zeilennummer, wie sie in der Tabelle angezeigt wird, ohne datamodel zu bekommen?

Auch ich benutze viewScope und wenn ich richtig verstanden habe, bedeutet das, dass ich die dataTable nicht an die Bean binden kann.

Antwort

28

Binden Sie die Tabelle einfach an die Ansicht selbst statt an eine Bean.

<h:dataTable binding="#{table}" ...> 

Dann können Sie #{table.rowIndex} wo nötig verwenden. Z.B.

<h:column>#{table.rowIndex + 1}</h:column> 
+1

Ich las einen anderen Beitrag, wo Sie dies als eine Lösung hatten, obwohl ich dachte, dass die Bindung = "# {table}" eine Abkürzung für die Bindung an die Bohne war. Ich wusste nicht, dass das möglich ist. Danke BalusC! – nivis

+0

Gern geschehen. – BalusC

+0

Ich dachte genau so wie @nivis. Vielleicht, weil der Wert des 'var' Attributs KEINE EL-Anweisung benötigt, aber der Wert des 'binding'-Attributs DOES. Ich hatte das Vorurteil, dass alle benannten Werte innerhalb der EL-Anweisung (von mir selbst) bereits deklariert werden sollten, und ich fühlte mich, als würde man Variablen (zB 'table',' rowItem') einen Namen geben, sollte NICHT mit EL-Statements passieren. –