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:
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:
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:
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:
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.