Pagination mit Standard-JSF

Ich bin heute über ein Feature der datatable-Komponente im Standard-JSF gestolpert, das ich die letzten Jahre übersehen habe: Pagination. Die letzten Jahre dachte ich, dass dies ein Feature von Frameworks wie Richfaces oder Primefaces wäre oder man dies selbst per Hand entwickeln müsste. Aber nein, man kann auch mit der <h:dataTable> Komponente auf einfache Weise das seitenweise Blättern über eine Liste von Objekten implementieren.

Alles was man dazu braucht, ist die zwei Attribute first und rows korrekt zu setzen. Also ungefähr so:

<h:dataTable value="#{pricelistBean.products}" var="item" first="#{pricelistBean.first}" rows="5">
	<h:column>
		<h:outputText value="#{item.name}" />
	</h:column>
   
	<h:column>
		<h:outputText value="#{item.price}" />
	</h:column>
	<f:facet name="footer">
		<h:panelGroup>
			<h:commandButton value="Zurück" action="#{pricelistBean.zurueck}" rendered="#{pricelistBean.zurueckVisible}" />
			<h:commandButton value="Weiter" action="#{pricelistBean.weiter}" rendered="#{pricelistBean.weiterVisible}"/>
		</h:panelGroup>
	</f:facet>
</h:dataTable>

Der Code in den Methoden “weiter()” und “zurueck()” muss nur dafür sorgen, dass die Property first korrekt hoch- bzw. runtergezählt wird. Das könnte zum Beispiel so aussehen:

	public String weiter() {
		first = first + 5;
		if (first &gt; products.size()) {
			first = products.size() - 5;
		}
		return null;
	}
	
	public String zurueck() {
		first = first - 5;
		if (first &lt;= 0) {
			first = 1;
		}
		
		return null;
	}

5 thoughts on “Pagination mit Standard-JSF

  1. Das ist cool, auf den ersten Blick würde mir noch einfallen, eine Variable für die menge der anzuzeigenden Zeilen der Tabelle (im Bsp. >5<) in ein Attribut der PriceListBean auszulagern. Dann könnte man auch dies dynamisch ändern!
    Danke, ich werde das nachher mal bei mir einbasteln.

  2. Musste auch ne Weile suchen. Wir verwenden Primefaces und damit ist das noch einfacher, weil es Out of the Box mit AJAX also Javascrip funktioniert. Dummerweise haben wir die Anforderung, dass es auch ohne JS funktionieren muss.

Leave a Reply

Your email address will not be published. Required fields are marked *

*