Tipp 01 Primefaces: Tabellen sortieren sich nicht


Umgebung

  • EE7
  • JSF 2.2
  • Primfaces 6 Snapshot

Folgender Fall ist gegeben: In einer xhtml-Seite wird auf eine Liste in einer Sessionbean für eine Tabelle verwiesen.

<p:dataTable value="#{sBDummy.myList}" var="item" >
	<p:column sortBy="#{item.description}" >
		<f:facet name="header" >
			<h:outputText value="Beschreibung" />
		</f:facet>
		<h:outputText value="#{item.description }" />
	</p:column>
</p:dataTable>

Es kommt zu Problemen bei der Sortierung der Spalten, wenn die Liste der Tabelle nicht in der Sessionbean verwaltet, sondern jedes mal aus einer Facade abgefragt wird. Die Anzeige der Tabelle verhält sich in diesem Fall normal, die Sortierung innerhalb des Kopfes der Tabelle funktioniert aber nicht.

@EJB
privat etransient MyDataFacade myDataFacade;

/** @return Angezeigte Liste */
public List getMyList () {
	// Die Daten werden aus der Facade z.B. aus der DB geladen
	return this.myDataFacade.findData();;
}

Es wird also die Liste bei jedem get Aufruf aus der EJB geladen. Dies kann zum einen ein Performanceproblem werden, da die get-Methode bei einem Server-Roundtrip mehrmals aufgerufen wird. Zum anderen funktioniert die Sortiereigenschaft der Tabelle bei Primefaces nicht. Um die Funktionalitäte zu gewährleisten, muss die Liste in der Sessionbean mit einem Attribut verwaltet werden. Die Initialisierung erfolgt je nach Bedarf

  • postconstuct-Methode
  • Navigation zu der xhtml-Seite
  • manuell durch Betätigung eines Buttons

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