IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Grails Java Discussion :

Creer des composants graphiques réutilisables


Sujet :

Grails Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 70
    Points : 71
    Points
    71
    Par défaut Creer des composants graphiques réutilisables
    Bonjour,
    Je cherche à créer des composants graphiques réutilisables avec Grails.
    Quelles sont toutes les solutions pour cela ?

    Un de mes besoins en la matière corresponderait à un tag qui formate (de manière complexe) une valeur passée en paramètre.
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <g:monTagFormatNumbre>${leNombreAFormater}</g:monTagFormatNumbre>
    D'avance merci à tou(te)s pour vos réponses.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 70
    Points : 71
    Points
    71
    Par défaut
    Des templates ou des tags d'après mes recherches mais je ne maîtrise pas tout pour le paramétrage de ces derniers.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    Il suffit de créer un TagLib :

    Pour cela il te suffit d'appeler le script grails :
    Ca te crée une classe MesTagsTagLib dans l'arborescence Taglib.

    - puis tu crées tous tes tags
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class MesTagsTagLib {
    def monTagFormatNumbre= { attrs, body ->
    		out << body() << geFormatNombre()
    		}
    def monTagFormatDate= { attrs, body ->
    		out << body() << geFormatDate()
    		}
     
    String getFormatNombre(""){
    		return "class=montant"	} /* enfin ce que tu as besoin de faire */
    puis dans ton gsp tu peux utiliser ta balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <g:monTagFormatNumbre>${leNombreAFormater}</g:monTagFormatNumbre>
    Voilà grosso modo le principe.

    Sinon tu peux faire des layout, c'est à dire des bouts de code gsp :
    il faut alors créer un fichier dans un répertoire composant par exemple de ton arborescence views préfixer par un underscore _ : par exemple _moncomposant.gsp
    Tu utilises ce layout dasn les autres gsp par la balise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <g:render template="/composant/moncomposant" />
    Attention ! dasn le gsp invoquant pas de _.

    Pour plus d'infos consulter la doc grails .
    A+

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    poor un passage de parametre, il vaut mieux faire un truc comme ca pour le taglib coté gsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <g:monTagFormatNumbre monnombre=${leNombreAFormater}>
    </g:monTagFormatNumbre>
    tu le recuperes comme ca dans le taglib :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def monTagFormatNumbre= { attrs, body ->
    		out << body() << geFormatNombre(attrs.monnombre)
    		}

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 70
    Points : 71
    Points
    71
    Par défaut
    Bonjour,
    Ce que tu m'as proposé fonctionne très bien. Merci.
    Mais ça ne rend pas visuellement le formatage que je désire.
    Ce que j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
        String getFormateNombre(Double inNombre, Integer inNombreDecimales, Double inDefautNombre)
        {
            Double nombre = inNombre
            if(nombre)
            {   // ex : pour arrondir nombre au centieme, on le multiplie par 100,
                // on arrondie a l'entier superieur (ceil) puis on redivise par 100
                if(!inNombreDecimales)
                {   inNombreDecimales = 2 }
                Double deca = Math.pow(10, inNombreDecimales)
                nombre = (Double) Math.ceil(nombre * deca) / deca
            }
            else if(inDefautNombre)
            {   nombre = inDefautNombre }
            return nombre
        }
     
        def formateNombre =
        { attrs, body ->
            out << body() << getFormateNombre(attrs.nombre, attrs.decimales, attrs.defaut)
        }
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <g:formateNombre nombre="${partInstance.weight}" decimales="${3}" defaut="${0}"></g:formateNombre>

    Je voudrais m'approcher de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <g:formatNumber number="${(partInstance.weight)? partInstance.weight : 0}" format="#,##0.00" />
    Ce que j'ai fait et qui ne fonctionne pas (il doit me manquer une connaissance conceptuelle ou quelque chose comme ça et ça me rend folle) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        def formateNombre2 =
        {attrs, body ->
            def valeur = attrs.remove('val')
            valeur = (valeur)? valeur : 0
            String debut = "<g:formatNumber number=\""
            String fin = "\" format=\"#,##0.00\" />"
            out << debut + valeur + fin
        }
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <g:formateNombre2 val="${partInstance.weight}" ></g:formateNombre2>
    Tu vois l'erreur ?

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    Puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <g:formateNombre nombre="${partInstance.weight}" decimales="${3}" defaut="${0}"></g:formateNombre>
    Je ne comprends pas decimales="${3}", tu as un composant dont id=3 où tu saisis ton nombre de décimales?
    Perso j'aurai plus vu decimales="3"...

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    Ca ca colle pas non plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def valeur = attrs.remove('val')
     
    <g:formateNombre2 val="${partInstance.weight}" ></g:formateNombre2>
    tu n'as pas de propriétés remove dasn tes attributs... Pour lire ta valeur tu dois faire attrs.val.
    Je te conseille de faire un println de attrs pour voir les paramètres que tu récupéres, tu verras mieux comment ca marche.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 70
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par macumba Voir le message
    Puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <g:formateNombre nombre="${partInstance.weight}" decimales="${3}" defaut="${0}"></g:formateNombre>
    Je ne comprends pas decimales="${3}", tu as un composant dont id=3 où tu saisis ton nombre de décimales?
    Perso j'aurai plus vu decimales="3"...
    Oui, c'est la saisie du nombre de décimales après la virgule.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 70
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par macumba Voir le message
    tu n'as pas de propriétés remove dasn tes attributs... Pour lire ta valeur tu dois faire attrs.val.
    Je te conseille de faire un println de attrs pour voir les paramètres que tu récupéres, tu verras mieux comment ca marche.
    Pas mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        def formateNombre2 =
        {attrs, body ->
            def valeur = attrs.val
            println("----------------------------------------------->  valeur : " + valeur  )
            valeur = (valeur)? valeur : 0
            println("----------------------------------------------->  valeur : " + valeur  )
     
            String debut = "<g:formatNumber number=\""
            String fin = ""
            fin = "\" format=\"#,##0.00\" />"
            println("----------------------------------------------->  "+ debut + "${valeur}" + fin  )
            out << debut + "${valeur}" + fin
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ----------------------------------------------->  valeur : 0.175
    ----------------------------------------------->  valeur : 0.175
    ----------------------------------------------->  <g:formatNumber number="0.175" format="#,##0.00" />

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    Pourquoi tu fais ca ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String debut = "<g:formatNumber number=\""
            String fin = ""
            fin = "\" format=\"#,##0.00\" />"
    ton taglib te permet de remplacer le contenu de ta balise <g:...> tu renvoies comme valeur une autre balise, je ne sais pas ce que ce que fais ton résultat mais ca ressemble à une espèce de boucle infini.

    la chaine de sortie doit être ta valeur formatée, pas un autre taglib...
    out << debut + "${valeur}" + fin

    Il faut que tu formates ton nombre avec les fonctions java...

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 70
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par macumba Voir le message
    Il faut que tu formates ton nombre avec les fonctions java...
    Quand je le fais en java, les zéros de fin disparaissent au moment de l'affichage.
    ex : 13,3 au lieux de 13,300 (si j'avais choisi 3 décimales).

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    Tu as utilisé une fonction de formatage?
    Je viens d'essayer ca et ca fonctionne très bien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DecimalFormat df = new DecimalFormat("0.000");
    System.out.println(df.format(12.5));
    Ou alors tu as peut être juste oublié les ""...

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 70
    Points : 71
    Points
    71
    Par défaut
    Merci, ça marche parfaitement .

    Et ça donne ça (avec nombre de decimales en entrée) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    class OutilTagLib
    {
        String getFormateNombre(Double inNombre, Integer inNombreDecimales, Double inDefautNombre)
        {
            Double nombre = inNombre
            String nombreString = ""
            // nombre par defaut
            if(!nombre)
            {   if(inDefautNombre) {   nombre = inDefautNombre } }
            else
            {   // nombre de decimales par defaut
                if(!inNombreDecimales)
                {   inNombreDecimales = 2 }
     
                // ex : pour arrondir nombre au centieme, on le multiplie par 100,
                // on arrondie a l'entier superieur (ceil) puis on redivise par 100
                Double deca = Math.pow(10, inNombreDecimales)
                nombre = (Double) Math.ceil(nombre * deca) / deca
     
                // ex : pour formater au centieme, on donne 0.00 comme format
                String formatDecimales = "0."
                for(int i = 0; i < inNombreDecimales; ++i) {   formatDecimales += "0" }
                DecimalFormat df = new DecimalFormat(formatDecimales);
                nombreString = df.format(nombre)
                // ex : pour formater a la francaise, on remplace le "." par une ","
                nombreString.replace('.', ',')
            }
            return nombreString
        }
     
        def formateNombre =
        { attrs, body ->
            out << body() << getFormateNombre(attrs.nombre, attrs.decimales, attrs.defaut)
        }
    }
    appelé comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <g:formateNombre nombre="${partInstance.weight}" decimales="${3}" defaut="${0}"></g:formateNombre>
    PS : le ${} de ${3} a l'air nécessaire pour garder le typage numérique.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. librairie/langage pour creer des composants graphiques ?
    Par Tymk dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 03/07/2008, 07h32
  2. Réponses: 4
    Dernier message: 03/07/2007, 09h42
  3. Sérialisation des composants graphiques
    Par sironimo dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 23/01/2007, 11h35
  4. Réponses: 4
    Dernier message: 15/12/2005, 22h36
  5. Activer et désactiver des composant graphiques?
    Par redabadache3 dans le forum Débuter
    Réponses: 1
    Dernier message: 16/08/2005, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo