22 mars

J'ai quelques heures à utiliser mon Google Code hébergé projet Grum sur l'état de choses (il était en effet sur le temps). Grum est un Grails petite application pour la gestion des utilisateurs, ce qui me permet de le web avec le cadre Grails à «jouer.

Je suis au courant de la mise en œuvre des plugins Grails nombreuses renoncé afin d'avoir peu d'effets secondaires que possible et tenir, même pour ceux cherchez tout simplement une introduction à Grails. Ainsi, inclus dans des solutions Grum, tels que celui-ci:

  • l'accès à une base de données Mysql en œuvre
  • 1:1, 1: n et n: m GORM relations modèle
  • jour même écrit Libs
  • les JSP Tag Lib DisplayTag utilisé pour afficher la page de données par page, à grouper, de trier, et dans tous les formats possibles (Excel, CSV, XML, PDF) à l'exportation
  • permet le téléchargement des fichiers
  • tests fonctionnels avec le plugin webtest utilisé
  • et la prestation de XML basés sur des URL (négociation de contenu courte) à mettre en œuvre

La version 0.3 utilise maintenant le plugin Grails webtest 1.2.1 et dans la version 2.0.3. Les sources , les fichiers SQL pour créer la base de données Mysql et une archive web avec toutes les bibliothèques requises sont disponibles sur Google Code pour télécharger prêt.

Nutztungshinweise:
Le code peut être librement utilisé, mais peut contenir des erreurs, pour lequel je décline toute responsabilité. La licence de bibliothèques, il doit être observé.

articles similaires:

Posté par gklinkmann \ \ tags: , , , ,

5 mars

Si vous n'êtes pas seulement depuis Grails avec des applications Web basées 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"> exportation vers: (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 partagés et la 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

articles similaires:

Posté par gklinkmann \ \ tags: , , ,

Janvier 2008

Tranquillement, elle est dahergekommen. Comme beaucoup d'autres projets Groovy (Groovy 1,7, 0,9 GPars, Gant 1,9) est également apparu dans le temps pour le Groovy Grails et Grails Exchange, une nouvelle version. La version finale 1.2 a été un long temps à venir.

Une version stable, il devrait être. C'est la raison pour la beta de longue et de la phase RC. Dim. base Groovy 1.2, ni sur la version 1.6.7 Groovy.

Pour la nouvelle version a Dierk König (Auteur de Groovy in Action), une analyse détaillée article écrit pour que ici que d'une courte liste de nouvelles fonctionnalités suivantes:

  • applications dépendances déclarative pour les bibliothèques au sein de Grails
  • point de vue plus rapide - des améliorations de performances pour Groovy Server Pages (GSP)
  • GORM par défaut sont configurables
  • des requêtes nommées, qui peut également servir de base de sélection pour le Finder méthodes dynamiques
  • Expansion, qui hein très bon soutien pour le repos et JSON
  • la documentation pour Grails autre moteur ne peut pas être (utilisé pour Grails base) des applications
  • Mise à jour de printemps 3
  • finement granuleuse configurable sources de données
  • un soutien accru pour des entités annotées
  • Tomcat comme conteneur de servlet par défaut. conteneur de servlets Jetty autres, comme est également supporté.

La liste complète des changements que vous pouvez dans le journal des modifications et des notes de mise à lire.

Grails 1.2 est sur la page du projet à télécharger prêts. Grails est suffisante pour des applications existantes, comme toujours

  Grails mise à niveau 

Le saut de la version 1.1 à 1.2 n'est pas aussi grande que celle de la version 1.0 à 1.1. En ce jour ne sont que quelques problèmes connus.

articles similaires:

Posté par gklinkmann \ \ tags: , , ,

27 décembre

canoo webtest Report

Le point sur Groovy à base de framework web Grails dans le monde Java permet le développement rapide d'applications web. La vitesse que vous avez payé, mais pas en sacrifiant les tests. Au contraire.

Le Canoo - Web Test Plugin tests sont rédigés dès que la requête elle-même (qui à mon avis la seule façon de le développeur de tester de faire savoureux).

Pour installer une assez simple:

  Grails> install-plugin webtest 

Et avec:

  1
 2
 3
 4
 5
 6
 7
  Grails> create-webtest
 WebTest nom n'est pas spécifié.  S'il vous plaît entrez:
 <Domain-name>
      Copying 1 file to < pfad zur Grails App > [Copier] Copie 1 fichier à <path to Grails App>
      Copying 1 file to </ pfad >< pfad zur Grails App >/ webtest / tests [Copier] Copie 1 fichier à </ <chemin> chemin de Grails App> / webtest / tests
 domain -name > Test.groovy Test Web générées à webtest / tests / <domain-name> Test.groovy
 pfad ></ domain > </ Domaine> </> </ path> de domaine 

nous avons créé son premier test pour une classe de Grails domaine. Tous les tests sont par défaut sous /webtest/tests stockées. Un test généré pourrait ressembler à ceci:
Continuer la lecture »

articles similaires:

Posté par gklinkmann \ \ tags: , , , ,

Le 29 novembre

grailspodcast logo

L'une des ressources les plus importantes lorsqu'il s'agit de Groovy et Grails est, à mon avis, le podcast Grails par Sven et Haiges et Glen Smith.

Le podcast que deux semaines dans la langue anglaise est tout, a maintenant la conséquence de 100 atteint.
Tout le meilleur de mon côté à cet événement et Merci beaucoup pour les informations nombreuses et nouvelles de ces dernières années sur les thèmes de Groovy et Grails.

Continuez.

articles similaires:

Posté par gklinkmann \ \ tags: , , , ,