Grails und displaytag – Paging leicht gemacht

Wer sich nicht erst seit Grails mit Webanwendungen auf Java Basis beschäftigt, dem dürfte die JSP Taglib displaytag ein Begriff sein.

Displaytag ermöglicht es ohne große Klimmzüge Tabellen in Java Server Pages auf mehrere Seiten aufzuteilen (Paging), zu sortieren, zu gruppieren und nach Excel, Csv, Xml und Pdf zu exportieren.
Grails unterstützt „out of the box“ nur das Paging und lange Zeit konnte man keine JSP Tag Libs in Grails verwenden, so dass man die restlichen Funktionalitäten entweder durch Plugins abbilden konnte oder selbst Hand anlegen musste.

Seit Grails 1.1 ist diese Beschränkung nun aufgehoben und der Test die beiden zu vereinen ist schon seit längerem erfolgreich abgeschlossen. Nur der Blog Eintrag darüber steht seit dem noch auf meiner ToDo Liste. Aber was lange währt wird gut (hoffe ich :-)).

Folgende Schritte sind zur Integration von displaytag in Grails notwendig:

libs

Zuerst sollten die Displaytag Bibliotheken neben dem Datenbank Treiber ins lib Verzeichnis kopiert werden.

Displaytag Konfigurationsdatei

Die Konfigurationsdatei von displaytag displaytag.properties muss unter src/java erstellt werden. Der Aufbau dieser Datei ist in der Doku von displaytag beschrieben. Für mein grum Projekt sieht die Konfiguration so aus:

export.types=csv excel xml pdf
export.excel=true
export.csv=true
export.xml=true
export.pdf=true
export.excel.class=org.displaytag.export.excel.DefaultHssfExportView
export.pdf.class=org.displaytag.export.DefaultPdfExportView
export.rtf.class=org.displaytag.export.DefaultRtfExportView
export.banner=
export.amount=list
paging.banner.placement=bottom
basic.msg.empty_list=No data found.
basic.msg.empty_list_row=No data found.
paging.banner.full=<<   <  {0}  >   >>
paging.banner.first= {0}  >   >>
paging.banner.last=<<   <  {0} 
paging.banner.one_item_found=1 Record found. Seite: 
paging.banner.all_items_found= {0} Records found. Seite: 
paging.banner.some_items_found= {0} Records found, show {2} - {3}. 

Displaytag Wrapper

Dynamische Links und Formatierungen werden in displaytag über das Decorator Pattern umgesetzt. Der Decorator wird in einer Wrapper Klasse implementiert, die in Grails natürlich in Groovy geschrieben ist. Meine Implementierung ist die Klasse DisplaytagWrapper, die im grum Projekt einen Link zu den Details der Benutzer erstellt und das Erstellungsdatum formatiert.

package de.koo.grum.groovy.util

import org.displaytag.decorator.TableDecorator;

public class DisplaytagWrapper extends TableDecorator{
   String getLinkToUser() {
      def user = getCurrentRowObject()
      return "${user.username}";
   }
   String getUserCreatedAt() {
      def user = getCurrentRowObject()
      return user.createdAt.format("dd.MM.yyyy HH:mm");
   }
}

Export Filter

Beim Export in ein nicht HTML Format muss der content type für die Antwort an den Browser neu gesetzt werden. Damit dies nicht zu Problemen führt, sollte ein Filter in der web.xml Datei definiert werden, der möglichen Fehlern entgegenwirkt. Displaytag bringt mit der Klasse ResponseOverrideFilter bereits eine Implementierung dafür mit.

Um in Grails Änderungen an der web.xml vornehmen zu können, müssen die Templates installiert werden:

grails install-templates

Danach befindet sich die web.xml im Verzeichnis src/templates/war. Für den Filter sind folgende Einträge notwendig.


   ResponseOverrideFilter
   org.displaytag.filter.ResponseOverrideFilter


   ResponseOverrideFilter
   /*
					

Einbindung in Groovy Server Page

Hat man diese ganzen vorbereitenden Schritte absolviert, kann man sich endlich an die Verwendung von displaytag in einer Groovy Server Page machen.
In meinem Beispiel user/list.gsp werden alle Benutzerdaten tabellarisch angezeigt. Die Tabelle ist durch das Attribut sortable nach Vor- und Nachnamen sortierbar (ohne erneuten Datenbankzugriff) und wird beim Erreichen der pagesize über das Attribut partialList auf mehrere Seiten verteilt.

  

..

   						
   						
   						
   						

...

Über zusätzliche Attribute (export, group) kann wie im Beispiel contactData/list.gsp auch der Export in die verschiedenen Ausgabeformate und eine Gruppierung der Einträge erreicht werden.


    
    
    
    
    
    
    						
    
    

Fazit:
Einmal konfiguriert ist displaytag eine der tollsten Lösungen für java basierte Webanwendungen um Daten tabellarisch aufzulisten. Der Funktionsumfang übertrifft dabei weit die Standard Funktionalität von Grails. Die Kombination von Grails und displaytag kann ich daher nur jedem empfehlen.

Links:
grum Quellcode

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: