Ceux qui ne peuvent pas seulement été avec des applications Web basées sur Java Grails, emploie l'attendu JSP taglib displaytag être un nom de ménage.
Il displaytag sans tables mentons grandes dans les pages serveur Java dans plusieurs pages (pagination), les trier, grouper et à l'exportation vers Excel, CSV, XML et PDF.
Grails a été pris en charge "out of the box" que la pagination et longtemps nous n'utilisons pas de libs balises JSP dans Grails, de sorte que vous pouvez mapper la fonctionnalité restante soit grâce à des plugins ou même dû donner un coup de main.
Depuis Grails 1.1, cette restriction est maintenant levée et de combiner les deux, le test a longtemps été complété avec succès. Seulement l'entrée de blog à ce sujet est, puisque même sur ma liste ToDo. Mais à quoi bon venir à ceux qui (je l'espère
).
Les étapes suivantes sont nécessaires pour intégrer displaytag dans Grails:
libs
Tout d'abord, les bibliothèques devraient être displaytag à côté du chauffeur base de données copié dans le répertoire lib.

Displaytag fichier de configuration
Le fichier de configuration de displaytag displaytag.properties être sous src/java à créer. La structure de ce fichier est dans le document de décrite par displaytag. Pour ma grum projet, la configuration ressemble à ceci:
Une
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| csv excel xml pdf exporter. csv Excel XML types pdf =
true l'exportation. excel = true
true exporter. csv = true
true l'exportation. xml = true
true l'exportation. pdf = true
= org. displaytag . export . excel . DefaultHssfExportView l'exportation. excel. class = org. displaytag. exportation. excel. DefaultHssfExportView
= org. displaytag . export . DefaultPdfExportView l'exportation. pdf. class = org. displaytag. exportation. DefaultPdfExportView
= org. displaytag . export . DefaultRtfExportView l'exportation. rtf. class = org. displaytag. exportation. DefaultRtfExportView
div class = "exportlinks" > Export to : { 0 } </ div > bannière à l'exportation = class = <div "export-left"> Exporter vers. {0} </ div>
list exporter. = montant liste
= bottom pagination. bannière. placement bas =
= No data found. de base. msg. empty_list = Pas de données trouvées.
. empty_list_row =< tr class = "empty" >< td colspan = "0" > No data found. </ td ></ tr ></ tr > de base. msg. empty_list_row = <tr class = "empty"> <td colspan = "0"> Aucune donnée trouvée. </ td> </ tr> </ tr>
=< span class = "pagelinks" >< a href = "{1}" >< strong >& lt ;& lt ;</ strong ></ a >& nbsp ;& nbsp ;& nbsp ;< a href = "{2}" >< strong >& lt ;</ strong ></ a >& nbsp ; { 0 } & nbsp ;< a href = "{3}" >< strong >& gt ;</ strong ></ a >& nbsp ;& nbsp ;& nbsp ;< a href = "{4}" >< strong >& gt ;& gt ;</ strong ></ a ></ span > bannière de pagination complète = <span class = "page left"> <a href = "{1}"> <strong> & lt; .. & lt; </ strong> </ a> & nbsp; & nbsp; & nbsp; <a href = "{2}"> <strong> & lt; gt <a href = "{3}"> <strong> &;; </ strong> </ a> & nbsp; {0} & nbsp < / strong> </ a> & nbsp; & nbsp; & nbsp; <a href = gt "{4}"> <strong> &; & gt; </ strong> </ a> </ span>
=< span class = "pagelinks" > { 0 } & nbsp ;< a href = "{3}" >< strong >& gt ;</ strong ></ a >& nbsp ;& nbsp ;& nbsp ;< a href = "{4}" >< strong >& gt ;& gt ;</ strong ></ a ></ span > pagination première bannière = <span class = "page left"> {0} & nbsp; .. <a href = "{3}"> <strong> & gt; </ strong> </ a> & nbsp; & nbsp; & nbsp; <a href = "{4}"> <strong> & gt; & gt; </ strong> </ a> </ span>
=< span class = "pagelinks" >< a href = "{1}" >< strong >& lt ;& lt ;</ strong ></ a >& nbsp ;& nbsp ;& nbsp ;< a href = "{2}" >< strong >& lt ;</ strong ></ a >& nbsp ; { 0 } </ span > bannière de pagination dernière = <span class = "page left"> <a href = "{1}"> <strong> & lt; .. & lt; </ strong> </ a> & nbsp; & nbsp; & nbsp; <a href = "{2}"> <strong> & lt; </ strong> </ a> & nbsp; {0} </ span>
=< span class = "pagebanner" > 1 Record found. Seite : </ span > bannière de pagination one_item_found = <span class = "banner page"> page 1 enregistrement trouvé ... </ span>
=< span class = "pagebanner" > { 0 } Records found. Seite : </ span > pagination bannière all_items_found = <span class = "banner page"> {0} enregistre Page: ... </ span>
=< span class = "pagebanner" > { 0 } Records found, show { 2 } - { 3 } . </ span >< br />< br /> pagination bannière some_items_found = <span class = "banner page"> {0} enregistrements trouvés, spectacle {2} - ... {3} </ span> <br /> <br /> |
Displaytag wrapper
Les liens dynamiques et mise en forme pour être mis en œuvre au cours de la pattern Décorateur en displaytag. Le décorateur est mis en œuvre dans une classe wrapper qui est bien sûr écrit en Groovy Grails en. Mon application est la classe DisplaytagWrapper qui a créé le projet grum un lien vers les détails de l'utilisateur et les formats de la date de la création.
Une
2
3
4
5
6
7
8
9
10
11
12
13
14
| de.koo.grum.groovy.util forfait
; importation org.displaytag.decorator.TableDecorator;
TableDecorator { public class TableDecorator DisplaytagWrapper {
Chaîne getLinkToUser () {
def user = getCurrentRowObject ()
/grum/user/show/${user.id} \" >${user.username}</a>" ; retour "<a href= \" /grum/user/show/${user.id} \"> $ {} user.username </ a>";
}
Chaîne getUserCreatedAt () {
def user = getCurrentRowObject ()
. format ( "dd.MM.yyyy HH:mm" ) ; format de retour d'utilisateur createdAt ("yyyy HH: mm") ..
}
} |
Filtres d'exportation
Être mis lors de l'exportation vers un format non-HTML, le type de contenu pour la réponse au navigateur. Pour éviter ce problème causant, un filtre doit être défini dans le fichier web.xml, qui contrecarre les erreurs possibles. Displaytag apporte la réponse prioritaire classe de filtre est déjà une mise en œuvre pour cela avec.
Pour Grails à des changements à la web.xml de vous faire, les modèles doivent être installés:
Puis il ya le web.xml dans le répertoire src/templates/war . Pour filtrer les entrées suivantes sont nécessaires.
Une
2
3
4
5
6
7
8
| <filter>
<filter-name> Réponse Override filtre </ filter-name>
<filter-class> org.displaytag.filter.ResponseOverrideFilter </ filter-class>
</ Filtre>
<filter-mapping>
<filter-name> Réponse Override filtre </ filter-name>
<url-pattern> / * </ url-pattern>
</ Filter-mapping> |
Intégration avec Server Page Groovy
Si vous avez terminé toutes ces étapes préparatoires, vous pouvez enfin descendre à l'utilisation de displaytag dans une page ASP Groovy.
Dans mon exemple, l'utilisateur / list.gsp toutes les données utilisateur seront affichés sous forme de tableau. Le tableau est par l'attribut sortable triables par nom et prénom (sans accès nouvelle base de données) et, lorsque la pagesize de l'attribut partialList répartis sur plusieurs pages.
Une
2
3
4
5
6
7
8
9
10
11
12
13
| = "display" % > <% @ Taglib uri = "http://displaytag.sf.net" prefix = "display"%>
<html>
..
defaultsort = "1" partialList = "true" <Affichage: nom de la table = "liste des utilisateurs" DefaultSort = "1" partialList = "true"
décorateur = "de.koo.grum.groovy.util.DisplaytagWrapper"
= "${pageSize}" requestURI = "/grum/user/list" size = "$ {size} résultat" pageSize = "$ {} pagesize" requestUri = "/ Grum / user / list"
= "0" cellspacing = "0" sort = "list" > class = "listing" cellpadding = "0" cellspacing = "0" sort = "list">
title = "Userame" /> <display:column property = title = "linkToUser" "Userame" />
title = "Firstame" sortable = "true" /> <display:column property = title = "firstname" "Firstame" triable = "true" />
title = "Lastname" sortable = "true" /> <display:column property = title = "lastname" "Lastname" triable = "true" />
title = "Created At" sortable = "true" /> <display:column property = title = "userCreatedAt" "Created At" triable = "true" />
</ Display: table>
... |
Des attributs supplémentaires ( export , group ) peut, comme dans l'exemple des données de contact ou list.gsp également exporter vers différents formats de sortie et un tableau d'entrées sont atteints.
Une
2
3
4
5
6
7
8
9
10
11
12
13
14
| export = "true" defaultsort = "1" partialList = "true" <Affichage: nom de la table = "liste de données de contact" à l'exportation = "true" DefaultSort = "1" partialList = "true"
décorateur = "de.koo.grum.groovy.util.DisplaytagWrapper"
= "${pageSize}" requestURI = "/grum/contactData/list" size = "$ {size} résultat" pageSize = "$ {}" pagesize RequestUri = "/ Grum / données de contact / list"
= "0" cellspacing = "0" sort = "list" > class = "listing" cellpadding = "0" cellspacing = "0" sort = "list">
value = "contactData.csv" /> nom = valeur = <display:setProperty "export.csv.filename" "contactData.csv" />
value = "contactData.xls" /> nom = valeur = <display:setProperty "export.excel.filename" "contactData.xls" />
value = "contactData.xml" /> nom = valeur = <display:setProperty "export.xml.filename" "contactData.xml" />
value = "contactData.pdf" /> nom = valeur = <display:setProperty "export.pdf.filename" "contactData.pdf" />
value = "list" /> nom = valeur = <display:setProperty "export.amount" "list" />
title = "Name" sortable = "true" group = "1" /> <display:column property = title = "linkContactDataToUser" "Name" triable = groupe = "true" "1" />
title = "type" sortable = "true" /> <display:column property = title = "type" "type" triable = "true" />
sortable = "true" /> <display:column property = "data" triable = "true" />
</ Display: table> |
Conclusion:
Une fois configuré displaytag un des plus grands des solutions pour les applications Web basées sur Java pour être énumérés dans les données tabulaires. La fonctionnalité dépasse de loin la fonctionnalité standard de Grails. La combinaison de Grails et displaytag je recommanderais à personne.
Liens:
source de Grum
Ceux qui ne peuvent pas seulement été avec des applications Web basées sur Java Grails, emploie la JSP taglib displaytag susceptibles d'être un nom de ménage. Il displaytag sans tables menton gros en Java ...
gklinkmann écrit par \ \ tags: Grails , Groovy , Java , Open Source