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 :

Hasmany et views


Sujet :

Grails Java

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Points : 46
    Points
    46
    Par défaut Hasmany et views
    Bonjour à tous.

    Je reprend un peu mon projet grails après plusieurs mois.
    Voici mon soucis. J'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Player {
     
        String name
        Team team
        static constraints = {
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Team {
        String name
     
    	static hasMany = [players:Player]
     
    	/*def getMatchesPlayed(){
    		Match.findAllByLocalTeamOrVisitorTeam(this,this)
    	}*/
    }
    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
    class Match {
     
        int localScore
        int VisitorScore
        Team localTeam
        Team visitorTeam
     
        static constraints = {
    		localTeam validator: { val, obj ->
    			!val.equals(obj.visitorTeam)			
    		}
     
    		visitorTeam validator: { val, obj ->
    			!val.equals(obj.localTeam)
    		}
    	}
    }
    1/ Je n'arrive plus (j'ai réussi il y a plusieurs mois mais j'ai perdu mes sources) à avoir une liste à sélection multiple dans mon formulaire d'edition de Team pour ajouter un ou plusieurs joueurs. J'ai essayé en scaffold et avec la view générée, même résultat.

    2/ Je souhaiterais que ma view "read" du Domain Team ai une propriété matchesPlayed, issue de ma fonction getMatchesPlayed.

    Comment faire?
    Merci à vous !

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    Bonjour lamoua76,

    Si tu souhaites visualiser une liste a sélection multiple sur tes écrans d'édition de Team, il faut modifier ton mapping et ne faire te relation que dans le sens team ->player.
    Il faut donc enlever l'attribut team dans Player.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    concernant ton deuxième point, il faut indiquer a hibernate que le getter ne correspond pas a un champ en base, pour cela il faut ajouter :
    static transients =['matchesPlayed']
    Par contre je ne suis pas sur que le scaffolding par défaut te génère ces champs, il faudra probablement modifier les écrans générés pour ajouter ta liste.

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Points : 46
    Points
    46
    Par défaut
    Tout d'abord merci pour tes réponses

    1/ J'ai testé et effectivement en rendant la relation unidirectionnelle, je retrouve la liste d'ajout de joueurs. Cependant je ne comprends pas bien pourquoi. Saurais-tu m'explique? Je trouve étrange de devoir changer le design métier pour obtenir cette liste dans la view.

    2/ Bingo encore J'avais bien utilisé transcients (lors d'un test) mais j'espérais que le scaffolding saurait utiliser cette méthode. Non, il va effectivement falloir que je le fasse à la main.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    J'ai installé les templates pour voir pourquoi grails réagissait comme cela (commande install template) et si l'on regarde le fichier renderEditor.template on peux voir le code suivant :
    ..
    else if (property.manyToOne || property.oneToOne)
    out << renderManyToOne(domainClass, property)
    else if ((property.oneToMany && !property.bidirectional) || (property.manyToMany && property.isOwningSide()))
    out << renderManyToMany(domainClass, property)
    else if (property.oneToMany)
    out << renderOneToMany(domainClass, property)
    ...
    qui montre que si la relation n'est pas bidirectionnelle on génère le même rendu que pour un manyToMany.

    Si la relation est bidirectionnelle alors grails décide qu'elle doit être gérée par la table qui possède l'identifiant permettant la relation entre les 2 tables.

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup pour le temps passé à répondre, ça m'a énormément aidé à mieux comprendre la "philosophie" de grails au niveau gestion des relations et scaffolding

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/02/2004, 19h14
  2. [SYBASE] Insert sur view
    Par P'tit Jean dans le forum Sybase
    Réponses: 4
    Dernier message: 31/10/2003, 12h21
  3. Tree View avec XML et XSL
    Par Drooxy dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/04/2003, 10h21
  4. Réponses: 6
    Dernier message: 21/06/2002, 14h48
  5. Réponses: 2
    Dernier message: 10/06/2002, 11h03

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