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

GWT et Vaadin Java Discussion :

EXT-GWT: afficher les données d'une bdd dans une grid


Sujet :

GWT et Vaadin Java

  1. #1
    Membre régulier Avatar de baya1
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Points : 89
    Points
    89
    Par défaut EXT-GWT: afficher les données d'une bdd dans une grid
    Bonjour tout le monde,

    j'utilise EXT-GWT 2.0.1 et GWT 1.7.0. J'aimerais afficher des données récupérées de ma base de données dans une grid en utilisant un ListStore.

    En fait, j'ai une table Personne dans ma base que j'ai représentée à l'aide d'un java bean. à partir de ce java bean, je récupère les données de la table personne et je les transmet au ListStore à travers un service RPC pour les afficher dans la grid. Voici les codes de mes classes:

    - Le java bean personne qui est créé dans un package à part que client comme suit:

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    package com.essai.essaibdd.data;
     
    import java.io.Serializable;
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;
    import com.extjs.gxt.ui.client.data.BeanModel;
     
     
    //Le javaBean Personne
    public class Personne extends Connexionbdd implements Serializable{
     
    	//Les variables
    	private int numero;
    	private String nom;
    	private String prenom;
    	private String motdepasse;
     
    	//le constructeur public, sans aucun type de retour
    	public Personne (){
     
    	}
    /*************************les getters et les setters*****************************/
    	public int getNumero(){
    		return this.numero;
    	}
     
    	public String getNom(){
    		return this.nom;
    	}
     
    	public String getPrenom(){
    		return this.prenom;
    	}
     
    	public String getMotDePasse(){
    		return this.motdepasse;
    	}
     
    	public void setNumero(int numero){
    		this.numero=numero;
    	}
     
    	public void setNom(String nom){
    		this.nom=nom;
    	}
     
    	public void setPrenom(String prenom){
    		this.prenom=prenom;
    	}
     
    	public void setMotDePasse(String motdepasse){
    		this.motdepasse=motdepasse;
    	}
    	/**************************************************************************************/
     
    	/*******************Code métier pour la classe personne*******************************/
    //sélection de toutes les personnes et les mettre dans une List
    	public List  listePersonne(){
    		ArrayList <Personne> v=new ArrayList <Personne>();
                    Personne p=new Personne();
    		System.out.println("v vide: "+v.isEmpty());
    		try{
    		lire("select * from personne");
    		while (suivant()){
    			p.setNumero(resultat.getInt("numero"));
    			p.setNom(resultat.getString("nom"));
    			p.setPrenom(resultat.getString("prenom"));
    		        p.setMotDePasse(resultat.getString("motdepasse"));
                            v.add(p);
    }
    		}
    		catch (SQLException exx){
    			System.out.println("La sélection de toutes les personnes a échoué");
    		}
    		return v;
    	}
    	/**************************************************************************************/
     
    }
    Remarque: La classe Connexionbdd gère la connexion à la bdd, les requêtes de sélection, de mise à jour, et le next du ResultSet

    Ensuite, je crée un service liste() qui retourne une liste contenant tous les enregistrements de la table Personne pour les mettre dans le store. le code de ce service est comme suit:
    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
     
    package com.essai.essaibdd.server;
     
    import java.util.ArrayList;
    import java.util.List;
    import com.essai.essaibdd.client.PersonneService;
    import com.essai.essaibdd.data.Personne;
    import com.extjs.gxt.ui.client.data.BeanModel;
    import com.google.gwt.user.client.rpc.AsyncCallback;
    import com.google.gwt.user.server.rpc.RemoteServiceServlet;
     
    public class PersonneServiceImpl extends RemoteServiceServlet implements PersonneService {
     
    	//déclaration du bean
    	Personne p=new Personne();
            public List liste(){
            return p.listePersonne();
     
    	}
    }
    et dans mon entryPoint, je fais appel à ce service pour remplir le ListStore en utilisant un RpcProxy et l'ajouter à la grid. Voici le code de l'EntryPoint
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    public class Essaibdd implements EntryPoint {
     
    	//Les variables
    	Viewport view=new Viewport();
    	ServiceDefTarget endpoint;	
        PersonneServiceAsync pers;
        ListStore <BeanModel>store;
        Grid <BeanModel>grid;
        ColumnModel cm;
        AsyncCallback callback1;
    	/**
             * This is the entry point method.
             */
    	public void onModuleLoad() {
     
    	  //Définition du proxy	
    	  pers=(PersonneServiceAsync)GWT.create(PersonneService.class);
          endpoint=(ServiceDefTarget)pers;
    	  String moduleRelatvieURL=GWT.getModuleBaseURL()+"personne";
    	  endpoint.setServiceEntryPoint(moduleRelatvieURL);
     
    	  //préparer le store
    	  //création du RpcProxy pour apporter les données à distance
      	 //grâce à liste
      	RpcProxy<BeanModel> proxy = new RpcProxy<BeanModel>() {
      		@Override
      		public void load(Object loadConfig,
      		AsyncCallback cb) {
     
    		pers.liste(cb);
      		}
      		};
     
          //création du reader	
          BeanModelReader reader = new BeanModelReader();
     
          //Création du ListLoeader
          ListLoader loader = new BaseListLoader(proxy, reader);
     
          //création du store
          store = new ListStore<BeanModel>(loader); 
     
          loader.load();
     
          view.setLayout(new AbsoluteLayout());
          /**********Grid***********/
         ContentPanel gridp=new ContentPanel();    
         gridp.setLayout(new FitLayout());
     
         //liste des colonnes
         ArrayList<ColumnConfig> columns=new ArrayList<ColumnConfig>();
         ColumnConfig col=new ColumnConfig();
     
         //première colonne numero
         col.setId("numero");
         col.setHeader("Numero");
         col.setWidth(100);
         columns.add(col);
     
         //deuxième colonne du nom
         col=new ColumnConfig();
         col.setId("nom");
         col.setHeader("Nom");
         col.setWidth(120);
         columns.add(col);
     
         //troisième colonne du prénom     
         col=new ColumnConfig();
         col.setId("prenom");
         col.setHeader("Prénom");
         col.setWidth(120);
         columns.add(col);
     
         //quatrième colonne du mot de passe
         col=new ColumnConfig();
         col.setId("motdepasse");
         col.setHeader("Mot de Passe");
         col.setWidth(120);
         columns.add(col);
     
         //création d'un modèle de colonne qui va contenir nos colonnes
         //et les mettre dans le GRID
         cm=new ColumnModel(columns);
     
         //construction de la grid
         grid=new Grid <BeanModel>(store, cm);
     
         //sélection d'une seule ligne à la fois
         grid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
     
         gridp.add(grid);
     
         gridp.setSize(500, 300);
         view.add(gridp);
     
         RootPanel.get().add(view);
     
     
    }
    }
    mais à l'exécution, la grid apparaît vide, sans les données, et j'ai le message d'erreur suivant:

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Starting Jetty on port 8080
       jetty-6.1.x
       Started SelectChannelConnector@0.0.0.0:8080
       Exception while dispatching incoming RPC call
    304 - GET /Essaibdd.html (127.0.0.1)
    304 - GET /Essaibdd.css (127.0.0.1)
    304 - GET /gxt/flash/swfobject.js (127.0.0.1)
    304 - GET /essaibdd/essaibdd.nocache.js (127.0.0.1)
    304 - GET /gxt/css/gxt-all.css (127.0.0.1)
    304 - GET /essaibdd/clear.cache.gif (127.0.0.1)
    304 - GET /essaibdd/hosted.html?essaibdd (127.0.0.1)
    304 - GET /essaibdd/gwt/standard/standard.css (127.0.0.1)
    Loading an instance of module 'essaibdd'
       Rebinding com.essai.essaibdd.client.PersonneService
          Invoking <generate-with class='com.google.gwt.user.rebind.rpc.ServiceInterfaceProxyGenerator'/>
             Generating client proxy for remote service interface 'com.essai.essaibdd.client.PersonneService'
                Analyzing 'com.essai.essaibdd.client.PersonneService' for serializable types
                   Analyzing methods:
                      public abstract java.util.List liste()
                         Return type: java.util.List
                            java.util.List
                               Verifying instantiability
                                  java.util.Vector<? extends java.lang.Object>
                                     Checking all subtypes of Object which qualify for serialization
                                        com.extjs.gxt.ui.client.data.BaseListLoadResult<Data>
                                           Verifying instantiability
                                              com.extjs.gxt.ui.client.data.BasePagingLoadResult<? extends java.lang.Object>
                                                 Checking parameters of 'com.extjs.gxt.ui.client.data.BasePagingLoadResult<? extends java.lang.Object>'
                                                    Checking type argument 0 of type 'com.extjs.gxt.ui.client.data.BasePagingLoadResult<Data>' because it is exposed as an array with a maximum dimension of 1 in this type or one of its subtypes
                                                       java.lang.Object[]
                                                          Analyzing component type:
                                                             java.lang.Object
                                                                In order to produce smaller client-side code, 'Object' is not allowed; consider using a more specific type
    304 - GET /essaibdd/clear.gif (127.0.0.1)
    Server class 'com.google.gwt.json.client.JSONException' could not be found in the web app, but was found on the system classpath
       Adding classpath entry 'file:/C:/eclipse/plugins/com.google.gwt.eclipse.sdkbundle.win32_1.7.0.v200907131018/gwt-windows-1.7.0/gwt-user.jar' to the web app classpath for this session
          More info: file:/C:/eclipse/plugins/com.google.gwt.eclipse.sdkbundle.win32_1.7.0.v200907131018/gwt-windows-1.7.0/doc/helpInfo/webAppClassPath.html
    500 - POST /essaibdd/personne (127.0.0.1) 57 bytes
       Request headers
          Accept: */*
          Referer: http://localhost:8080/essaibdd/hosted.html?essaibdd
          Accept-Language: fr
          Accept-Encoding: gzip, deflate
          User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; InfoPath.1; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
          Host: localhost:8080
          Connection: Keep-Alive
          Content-Type: text/x-gwt-rpc; charset=utf-8
          Content-Length: 129
          Cache-Control: no-cache
       Response headers
          Content-Type: text/plain; charset=iso-8859-1
    Et là, je ne comprends pas où est le problème. Est ce que vous auriez une solution, ou une autre méthode pour afficher des données d'une bdd dans une grid?

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Pour commencer, soyons agréable

    Je vois que certains ont lus mes recommandations et ça fait plaisir car d'entrée de jeu, on situe mieux le contexte (ça nous évite de vous le demander à chaque fois que c'est pas évident)

    Maintenant que je me suis approché avec mon grand sourire, je vais sortir mon bâton

    Sans regarder en détail ton erreur, je vois d'entrée de jeu que ça ne peut pas marcher
    Je vois que le post de nico est bien à propos parce que j'ai été choqué par un chose (par plusieurs à vrai dire ) ...

    • Dans ta classe Personne que tu envois du serveur au client, il y a un import java.sql.* et rien que ça, je sens que le compilo GWT ne vas pas aimer
      N'oublie pas que Personne sera traduit en javascript et que par conséquent, tu ne peux pas utiliser des librairies non GWTcompatible.

    • La deuxième chose qui me choque (en fait c'est la première chronologiquement mais c'est pas la source de ton erreur, c'est plutôt un facteur agravant) :
      D'après moi, tu fais une erreur que font beaucoup de débutant : une mauvaise utilisation de l'héritage : Personne qui étend Connexionbdd ! (Je te taquine car je comprend pourquoi tu as fait cela mais sais tu qu'il y a des solutions plus élégantes ?)


    Pour revenir à ton problème !
    L'erreur qu'il t'affiche, c'est qu'il ne trouve pas la librairie JSON de GWT dans tes sources.
    Aurais tu oublié de faire un import dans ton fichier de module GWT ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <inherits name='com.google.gwt.json.JSON'/>
    Et puisque je suis quasiment sûr que ça ne va pas marché ensuite (cf ma 1° remarque), il te faut mieux découper les responsabilités.
    Dans ton implémentation de service RPC (servlet), tu fais ce que tu veux mais il faut que ta méthode RPC retourne des objets "GWT Compatible" et le code actuel de ta classe Personne ne l'est pas !
    Soit tu conserve ta classe Personne telle quelle et tu copies les données que tu veux envoyé dans un object "GWT Compatible" (des objets ModelData de gxt par exemple)
    Soit tu crées un bean Personne "GWT Compatible" (des propriétés simples elle même "GWT Compatible", des getters et des setters) et à l'aide de ta connexion BDD, tu remplis une liste de tel bean.

    Bon courage ...

    Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait. Marcel PAGNOL
    On ne savait pas que c'était impossible, alors on l'a fait. John Fitzgerald KENNEDY.
    L'inexpérience est ce qui permet à la jeunesse d'accomplir ce que la vieillesse sait impossible. Paul (Tristant) BERNARD
    La meilleure façon de prédire l'avenir, c'est de l'inventer.

  3. #3
    Membre régulier Avatar de baya1
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Points : 89
    Points
    89
    Par défaut
    Salut,

    Merci beacoup benwit, j'ai suivi tes conseils et ça a marché

    Donc j'ai fait mon bean Personne tout simple, comme tu l'as conseillé, seulement avec ses propriétés, ses getters et ses setters et j'ai enlevé le import java.sql.* . Ensuite, c'est dans la classe Connexionbdd que j'ai mis la méthode qui récupère les données de la bdd pour les mettre dans une liste selon le bean, voici le code de cette classe:

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    package com.essai.essaibdd.data;
     
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;
    import com.essai.essaibdd.client.Personne;
     
    //la classe de la connexion à la base de données
    public class Connexionbdd {
     
    	//les variables
    	private Connection connexion;
    	private Statement instruction;
    	protected ResultSet resultat;
     
    	//préparation de la connexion à la bdd
    	public Connexionbdd(){
    		try{
    			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    			connexion=DriverManager.getConnection("jdbc:odbc:personne", "postgres", "bdd1");
    			instruction=connexion.createStatement();
    		}
    		catch(ClassNotFoundException ex){
    			System.err.println("Problème de pilote");
    		}
    		catch(SQLException ex){
    			System.err.println("Base de données non trouvée ou requête incorrecte");
    		}
    	}
     
    	//méthode pour le Select
    	public void lire(String requete){
    		try{
    			resultat=instruction.executeQuery(requete);
    		}
    		catch(SQLException ex){
    			System.err.println("Requête Select incorrecte: "+requete);
    		}
    	}
     
    	//méthode pour le Insert ou le Update
    	public void miseAjour (String requete){
    		try{
    			instruction.executeUpdate(requete);
    		}
    		catch(SQLException ex){
    			System.err.println("Requete MAJ incorrecte: "+requete);
    		}
    	}
     
    	//méthode du suivant de ResulutSet
    	public boolean suivant(){
    		try{
    			return resultat.next();
    		}
    		catch(SQLException ex){
    		    return false;
    		}
    	}
     
    	//méthode d'arrêt de la connexion
    	public void arret(){
    		try{
    			connexion.close();
    		}
    		catch(SQLException ex){
    			System.err.println("Erreur sur l'arrêt de la connexion à la BDD");
    		}
    	}
     
     
    	/*************************Code métier*****************************/
     
    	//liste des personnes
    	public List<Personne>  listePersonne(){
    		ArrayList <Personne> v=new ArrayList <Personne>();
    		Personne p;
    		System.out.println("v vide: "+v.isEmpty());
    		try{
    		lire("select * from personne");
    		while (suivant()){
    			p=new Personne();
    			p.setNumero(resultat.getInt("numero"));
    			p.setNom(resultat.getString("nom"));
    			p.setPrenom(resultat.getString("prenom"));
    			p.setMot(resultat.getString("motdepasse"));
                            v.add(p);
                        }
    		}
    		catch (SQLException exx){
    			System.out.println("La sélection de toutes les personnes a échoué");
     
    		}
    		return v;
     
    	}
     
    }
    puis, dans l'implémentation du service, j'ai appelé cette méthode comme suit:
    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
     
    package com.essai.essaibdd.server;
     
    import java.util.ArrayList;
    import java.util.List;
    import com.essai.essaibdd.client.PersonneService;
    import com.essai.essaibdd.client.Personne;
    import com.essai.essaibdd.data.Connexionbdd;
    import com.extjs.gxt.ui.client.data.BeanModel;
    import com.google.gwt.user.client.rpc.AsyncCallback;
    import com.google.gwt.user.server.rpc.RemoteServiceServlet;
     
    public class PersonneServiceImpl extends RemoteServiceServlet implements PersonneService {
           Connexionbdd cb=new Connexionbdd();
    public List <Personne> liste(){
    return cb.listePersonne();
     
    	}
    }
    et dans l'entryPoint rien de changé. Avec ça, ça a marché

    Mais j'ai une autre question cependant: dans la classe Connexionbdd il y a import java.sql.*; et ça a marché côté RPC!!!! est ce que ce n'était pas compatible seulement avec les java bean???!!!!

    aussi quand tu dis:
    D'après moi, tu fais une erreur que font beaucoup de débutant : une mauvaise utilisation de l'héritage : Personne qui étend Connexionbdd ! (Je te taquine car je comprend pourquoi tu as fait cela mais sais tu qu'il y a des solutions plus élégantes ?)
    quelles sont ces solutions élégantes?

    Merci encore

  4. #4
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Citation Envoyé par baya1 Voir le message
    Mais j'ai une autre question cependant: dans la classe Connexionbdd il y a import java.sql.*; et ça a marché côté RPC!!!! est ce que ce n'était pas compatible seulement avec les java bean???!!!!
    Et à ton avis, quel est la différence ?
    Dans les deux cas, tu envois un bean Personne OK.
    • Dans le premier cas, il n'était pas transformable en javascript parce que lors de la compilation, GWT aurait cherché le code source java.sql.* auquel il n'a pas accès ! Le code de Personne était lié au code java.sql.*.
    • Dans le deuxième cas, il est transformable en javascript parce que tu ne fais plus référence au code java.sql.* dans le bean Personne. Le code de Personne ne dépend pas de Connexionbdd.



    Citation Envoyé par baya1 Voir le message
    quelles sont ces solutions élégantes?
    En objet, il y a deux relations fondamentales :
    • la relation d'héritage
    • la relation cliente (celle qui consiste à utiliser une classe à partir d'une autre classe / la classe utilisatrice est nommée le client)


    L'héritage représente une relation assez forte, il faut qu'il y est un sens "Etre un".
    Tu peux ainsi faire des classes PersonneMorale et PersonnePhysique qui étendent Personne dans une application Juridique.
    L'héritage est utile mais doit être privilégié dans le cas où tu as la main sur le code des classes entrant dans la chaîne d'héritage.

    Généralement, quand tu n'as pas la main sur le code du parent, il faut préférer la composition à l'héritage. La composition est un type particulier de relation cliente.

    Prenons un exemple pour créer une fenêtre Swing :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Héritage
    class MaFrame extends JFrame ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // Composition
    class MaFrame
    {
        void display()
        { 
           frame.display();
        }
     
        // JFrame est client de MaFrame
        JFrame frame = new JFrame();
    }
    La composition apporte de nombreux avantages :
    • Elle permet "de simuler un héritage multiple", c'est à dire d'appeler du code appartenant à plusieurs classes.
    • Elle est moins dépendante de l'évolution de la super classe, tu peux avoir des modification de comportement suite à la redéfinition/surcharges/changement de visibilité de méthodes.
    • Elle peut masquer l'accès à certaines méthodes de la classe parente, ...



    Dans ton exemple, je trouve plus propre que tu as séparé Person de ConnexionBdd. Pas toi ?
    Qu'est ce que t'apportait l'héritage ?
    En plus, dans ton exemple, c'est PersonneServiceImpl qui joue d'entremetteur, il est client de ConnexionBdd, il lui demande de lui fournir une liste de personne.

    Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait. Marcel PAGNOL
    On ne savait pas que c'était impossible, alors on l'a fait. John Fitzgerald KENNEDY.
    L'inexpérience est ce qui permet à la jeunesse d'accomplir ce que la vieillesse sait impossible. Paul (Tristant) BERNARD
    La meilleure façon de prédire l'avenir, c'est de l'inventer.

  5. #5
    Membre régulier Avatar de baya1
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Points : 89
    Points
    89
    Par défaut
    Salut,

    Merci beaucoup pour l'explication . C'est beaucoup plus clair maintenant. Donc, en résumé, il faudrait que le retour du RPC soit GWT compatible car il va l'envoyer au client et ce même client sera compilé en javascript.

    Pour ce qui est de la séparation du bean de la Connexionbdd, je suis d'acord, c'est beaucoup plus propre . à ce propos, j'ai voulu aussi séparer tout ce qui est données du package client (com.essai.essaibdd.client), en les mettant dans un autre package par exemple: com.essai.essaibdd.data.
    Avant, mon bean était dans le package client et ça marchait, mais dès que je l'ai transféré dans le package data, ça ne marche plus et il me génère le message d'erreur suivant:

    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
     
    Starting Jetty on port 8080
       jetty-6.1.x
       Started SelectChannelConnector@0.0.0.0:8080
    304 - GET /Essaibdd.html (127.0.0.1)
    304 - GET /Essaibdd.css (127.0.0.1)
    304 - GET /gxt/flash/swfobject.js (127.0.0.1)
    304 - GET /gxt/css/gxt-all.css (127.0.0.1)
    304 - GET /essaibdd/essaibdd.nocache.js (127.0.0.1)
    304 - GET /essaibdd/hosted.html?essaibdd (127.0.0.1)
    304 - GET /essaibdd/gwt/standard/standard.css (127.0.0.1)
    Loading an instance of module 'essaibdd'
       Refreshing module from source
          Validating newly compiled units
             Removing units with errors
                Errors in 'file:/C:/Documents%20and%20Settings/Baya/workspace/Essaibdd/src/com/essai/essaibdd/client/PersonneService.java'
                   Line 16: No source code is available for type com.essai.essaibdd.data.Personne; did you forget to inherit a required module?
                Errors in 'file:/C:/Documents%20and%20Settings/Baya/workspace/Essaibdd/src/com/essai/essaibdd/client/PersonneServiceAsync.java'
                   Line 16: No source code is available for type com.essai.essaibdd.data.Personne; did you forget to inherit a required module?
             Removing invalidated units
                Compilation unit 'file:/C:/Documents%20and%20Settings/Baya/workspace/Essaibdd/src/com/essai/essaibdd/client/Essaibdd.java' is removed due to invalid reference(s):
                   file:/C:/Documents%20and%20Settings/Baya/workspace/Essaibdd/src/com/essai/essaibdd/client/PersonneService.java
                   file:/C:/Documents%20and%20Settings/Baya/workspace/Essaibdd/src/com/essai/essaibdd/client/PersonneServiceAsync.java
       Finding entry point classes
          Unable to find type 'com.essai.essaibdd.client.Essaibdd'
             Hint: Previous compiler errors may have made this type unavailable
             Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly
       Failure to load module 'essaibdd'
    est-ce qu'il y a un autre 'inherit' que je devrais mettre dans le fichier de module de mon projet? ou est-ce autre chose?

    Merci d'avance pour votre aide.

  6. #6
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Citation Envoyé par baya1 Voir le message
    Donc, en résumé, il faudrait que le retour du RPC soit GWT compatible car il va l'envoyer au client et ce même client sera compilé en javascript.
    Tu as compris.

    Citation Envoyé par baya1 Voir le message
    que je devrais mettre dans le fichier de module de mon projet? ou est-ce autre chose?
    Pour le dossier source "data", il faut l'ajouter dans ton module pour que gwt sache où aller chercher les sources. Voir dernière question/réponse de ce post.

    Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait. Marcel PAGNOL
    On ne savait pas que c'était impossible, alors on l'a fait. John Fitzgerald KENNEDY.
    L'inexpérience est ce qui permet à la jeunesse d'accomplir ce que la vieillesse sait impossible. Paul (Tristant) BERNARD
    La meilleure façon de prédire l'avenir, c'est de l'inventer.

  7. #7
    Membre régulier Avatar de baya1
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Points : 89
    Points
    89
    Par défaut
    Salut,
    Pour le dossier source "data", il faut l'ajouter dans ton module pour que gwt sache où aller chercher les sources. Voir dernière question/réponse de ce post.
    J'ai suivi exactement ce que t'as mis dans ce post http://www.developpez.net/forums/d79...q/#post4592149 et ça marche très bien .

    Donc:
    - dans le dossier client, il y a mon entrypoint et les interfaces du RPC
    - dans le dossier data, il y a les bean
    - dans le dossier server, il y a l'implémentation des services du RPC (servlet) et la classe Connexionbdd puisqu'elle n'est pas visible par les client et sera traduite en byte code.
    - et bien sûr dans le fichier de module GWT (exemple: Essaibdd.gwt.xml) j'ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <source path="client"></source>
    <source path="data"></source>
    puisque le contenu des dossiers client et data sera compilé en javascript.
    Et voilà, ça marche

    Merci encore.

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Travaillant actuellement sur un application web GWT, je cherche à remplir moi aussi une grille via ma base MySQL.

    Ton travail m'intéresse et j'aimerai connaître le contenu de ta classe Personne. En espérant que tu l'ai encore qlq part vu la date du topic.

    Merci

  9. #9
    Membre régulier Avatar de baya1
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Points : 89
    Points
    89
    Par défaut
    Salut,

    Non je n'ai pas ma classe Personne. Mais comme je l'ai dit dans ce topic, je l'ai faite comme un bean simple. Elle implémente seulement Serailizable, elle a seulement ses propriétés, les getters et les setters, c'est tout. Et j'avais mis la connexion à la base de données dans une classe à part.

    Voilà, j'espère que j'ai pu répondre à ta question

  10. #10
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    j'ai une question et j'aimerai bien être informer avant d'investir du temps pour réaliser mon projet.

    j'ai un ancien projet que je veux utiliser pour apprendre GWT 2.3.0 avec gxt-2.2.5 sous eclipse 3.7.

    Mon ancien projet composer de 2 parties WEB (en jsf) la 2 éme partie et qui m’intéresse c'est le core (contiens la DAO, le métier,les services et les beans de l'application)

    mon but c'est d'ajouter le Core au build path d'un nouveau projet GWT (qui va couvrir la partie IHM) et de l'utiliser pour acceder au données et au services pré-développés sur le core.

    NB : j'ai essayer de faire le core en jar est de l'ajouter à un petit projet GWT mais je rencontre souvent l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Type 'ma.iam.criam.core.model.Civilite' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = ma.iam.criam.core.model.Civilite@1e24f4f
    ma question : est ce que je dois recréer tous les beans dans le projet GWT ou bien d'utiliser seulement celles qui sont sure le core ? si oui comment je peux faire car j'aimerai bien afficher les données dans un grid mais j y arrive plus!!

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

Discussions similaires

  1. [Débutant] Afficher les données de la bdd dans un datagridview
    Par mrbrams dans le forum C#
    Réponses: 5
    Dernier message: 09/10/2014, 15h37
  2. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  3. Afficher les données d'un Vector dans une JTable
    Par lamyy dans le forum Composants
    Réponses: 2
    Dernier message: 26/10/2011, 13h56
  4. [MySQL] Envoyer les données d'un CSV dans une BDD Mysql
    Par guyfoot dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/09/2007, 07h13

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