5 mars

Si vous n'êtes pas seulement depuis Grails avec des applications Web sur Java, JSP emploie attendus Taglib DisplayTag un terme.

il DisplayTag sans grandes tables de tirer en Java Server Pages de séparer plusieurs pages (paging), sorte de, au groupe et, CSV, XML et PDF à l'exportation vers Excel.
Grails a été pris en charge "out of the box" que la pagination et le temps long, nous n'utilisons pas JSP Tag Libs dans Grails, de sorte que l'on peut cartographier les fonctions restantes, soit grâce à des plugins ou même dû prêter main-forte.

Depuis Grails 1.1 Cette restriction est désormais levée et les deux s'unissent le test est achevé depuis longtemps avec succès. Seule l'entrée sur ce blog est depuis le toujours sur ma liste de tâches à faire. Mais ce qui va arriver à ces bons (je l'espère :-) ).

Les étapes suivantes sont nécessaires pour intégrer dans DisplayTag Grails:

libs

Tout d'abord, les bibliothèques sont DisplayTag à côté de la base de données pilotes copié dans le répertoire lib.

fichier de configuration DisplayTag

Le fichier de configuration de DisplayTag displaytag.properties doit être inférieure à src/java à créer. La structure de ce fichier est dans le document DisplayTag décrit. Pour ma Grum projet est la configuration comme ceci:

  1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
  csv excel xml pdf l'exportation. CSV Excel types pdf xml =
 true l'exportation. Excel = true
 true l'exportation. 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. org = classe. DisplayTag. exportation. DefaultRtfExportView
 div class = "exportlinks" > Export to : { 0 } </ div > banner = <div classe. exportation = "export left"> Exporter: (0) </ div>
 list l'exportation. = montant liste
 = bottom bannière. = fond de placement. paging
 = No data found. de base. msg. empty_list = Aucune donnée trouvée.
 . empty_list_row =< tr class = "empty" >< td colspan = "0" > No data found. </ td ></ tr ></ tr > de base. msg. empty_list_row = class = <tr <td colspan = "empty"> "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. complète = <span classe. paging = "pagelink"> <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 = "(4)"> <strong> & gt href; & gt; </ strong> </ / span> <une
 =< span class = "pagelinks" > { 0 } & nbsp ;< a href = "{3}" >< strong >& gt ;</ strong ></ a >& nbsp ;& nbsp ;& nbsp ;< a href = "{4}" >< strong >& gt ;& gt ;</ strong ></ a ></ span > bannière. first = <span classe. paging = "pagelink"> (0) & nbsp; <a href = & "(3)"> <strong>; <GT / strong> </ A> & nbsp; & nbsp; & nbsp; <a href = "(4)"> <strong> & gt; & gt; </ strong> </> / span> <une
 =< span class = "pagelinks" >< a href = "{1}" >< strong >& lt ;& lt ;</ strong ></ a >& nbsp ;& nbsp ;& nbsp ;< a href = "{2}" >< strong >& lt ;</ strong ></ a >& nbsp ; { 0 } </ span > dernière bannière. <span = classe. paging ='pagelink> <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. one_item_found = <span classe. paging = "pagebanner"> enregistrement 1 trouvés. Page: / span> <
 =< span class = "pagebanner" > { 0 } Records found. Seite : </ span > bannière. all_items_found = <span classe. paging = "pagebanner"> (0) Résultats. Page: / span> <
 =< span class = "pagebanner" > { 0 } Records found, show { 2 } - { 3 } . </ span >< br />< br /> bannière. some_items_found = <span classe. paging = "pagebanner"> (0) Résultats, montrent (2) - (3). </ span> <br /> <br /> 

DisplayTag Wrapper

liens dynamiques et mise en forme sont mises en œuvre sur le DisplayTag Decorator Pattern. Le décorateur est une classe wrapper mis en œuvre dans le cadre de Grails est écrit en Groovy. Mon application est la classe DisplaytagWrapper , le projet de Grum un lien vers les détails de l'utilisateur créé dans le format et la date de création.

  1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
  de.koo.grum.groovy.util paquet

 ; org.displaytag.decorator.TableDecorator d'importation;

 TableDecorator { public class s'étend DisplaytagWrapper TableDecorator (
    String GetLinkToUser () (
       utilisateur getCurrentRowObject def = ()
       /grum/user/show/${user.id} \" >${user.username}</a>" ; «retour <a href= /grum/user/show/${user.id} \" \"> $ (user.username) </ a>";
    )
    String GetUserCreatedAt () (
       utilisateur getCurrentRowObject def = ()
       . format ( "dd.MM.yyyy HH:mm" ) ; CreateDate utilisateur retour .. (format "jj.mm.aaaa HH: mm");
    )
 ) 

filtre d'exportation

être réglé lors de l'exportation dans un format HTML, le type de contenu de la réponse au navigateur. Alors que cela n'entraîne pas de problèmes, il faut filtrer dans le fichier web.xml peut être défini, de lutter contre les erreurs possibles. DisplayTag apporte la classe ResponseOverrideFilter déjà une mise en œuvre pour cela avec.

Pour Grails des changements dans le web.xml de faire, vous devez les modèles sont installés:

  Grails install-modèles 

Il ya ensuite le web.xml dans le répertoire src/templates/war . Pour le filtre, les entrées suivantes sont nécessaires.

  1
 2
 3
 4
 5
 6
 7
 8
  <filtre>
    <filter-name> ResponseOverrideFilter </-name> filtre
    <Org.displaytag.filter.ResponseOverrideFilter <filter-class> / classe> filtre
 /> Filtre <
 <filter-mapping>
    <filter-name> ResponseOverrideFilter </-name> filtre
    / <* <url-pattern> /-Pattern> url
 </-Mapping> Filtre 

Participation à la page Server Groovy

Si vous avez suivi toutes ces étapes préparatoires, vous pouvez enfin descendre à l'aide DisplayTag dans une page Groovy Server.
Dans mon exemple, l'utilisateur / list.gsp données utilisateur sont affichés dans un tableau. Le tableau est par l'attribut sortable par nom et prénom triables il ya (sans accès à la base de nouvelles) et est atteint lorsque le pagesize de l'attribut partialList répartis sur plusieurs pages.

  1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
  = "display" % > @% Taglib <uri = "http://displaytag.sf.net" prefix = "">% affichage  
 <html>
 ..
 defaultsort = "1" partialList = "true" <Affichage: nom de la table = "listeUtilisateurs" DefaultSort = "1" partialList = "true"
 décorateur = "de.koo.grum.groovy.util.DisplaytagWrapper"
 = "${pageSize}" requestURI = "/grum/user/list" size = "$ (ResultSize)" PageSize = "$ (pageSize)" requestURI = "/ Grum / user /" liste
 = "0" cellspacing = "0" sort = "list" > class = "listing" cellpadding = "0" cellspacing = "0" sort = "list">
    title = "Userame" /> propriété <display:column = "linkToUser" title = "Userame" />						
    title = "Firstame" sortable = "true" /> propriété <display:column = "firstname" title = "Firstame" sortable = /> "true"						
    title = "Lastname" sortable = "true" /> propriété <display:column = "lastname" title = "Lastname" sortable = /> "true"						
    title = "Created At" sortable = "true" /> propriété <display:column = "userCreatedAt" title = "Created At" sortable = /> "true"						
 </ Affichage: table>
 ... 

Avec des attributs supplémentaires ( export , group ) peut, comme dans l'exemple des données de contact / list.gsp également exporter vers différents formats de sortie et un groupement d'entrées sont atteints.

  1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
  export = "true" defaultsort = "1" partialList = "true" <Affichage: nom de la table = "contactDataList" export = "true" DefaultSort = "1" partialList = "true"
 décorateur = "de.koo.grum.groovy.util.DisplaytagWrapper"
 = "${pageSize}" requestURI = "/grum/contactData/list" size = "$ (ResultSize)" PageSize = "$ (pageSize)" requestURI = "/ Grum données de contact / / liste"
 = "0" cellspacing = "0" sort = "list" > class = "listing" cellpadding = "0" cellspacing = "0" sort = "list">
     value = "contactData.csv" /> = Nom de la valeur <display:setProperty = "export.csv.filename" "contactData.csv" />
     value = "contactData.xls" /> = Nom de la valeur <display:setProperty = "export.excel.filename" "contactData.xls" />
     value = "contactData.xml" /> = Nom de la valeur <display:setProperty = "export.xml.filename" "contactData.xml" />
     value = "contactData.pdf" /> = Nom de la valeur <display:setProperty = "export.pdf.filename" "contactData.pdf" />
     value = "list" /> = Nom de la valeur <display:setProperty = "export.amount" "list" />

     title = "Name" sortable = "true" group = "1" /> propriété <display:column = "linkContactDataToUser" title = = "Name" groupe "true" sortable = /> "1"						
     title = "type" sortable = "true" /> propriété <display:column = "type" title = "type" sortable = /> "true"
     sortable = "true" /> propriété <display:column = "data" sortable = /> "true"
 </ Affichage: table> 

Conclusion:
Une fois configuré DisplayTag une des plus grandes solutions pour les applications Web basées sur Java pour les données des tables liste. La fonctionnalité de cette dépasse de loin la fonctionnalité standard de Grails. La combinaison de Grails et DisplayTag Je peux donc recommander à quiconque.

Liens:
Source Grum

Mettre en favori:
  • Digg
  • del.icio.us
  • Netvouz
  • DZone
  • ThisNext
  • MisterWong
  • Wists
  • Technorati
  • Google Bookmarks

articles similaires:

Posté par gklinkmann \ \ tags: , , ,

Commentaire

Oui, je veux être notifié de commentaires!