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 :

Remplir Grid avec données Hibernate


Sujet :

GWT et Vaadin Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Par défaut Remplir Grid avec données Hibernate
    Bonjour,

    je réalise une petite application dans laquelle je récupère des données depuis ma base pour les insérer dans un Grid (planning). Jusque là tout va bien. Le seul petit soucis c'est que tout ça prend du temps, aussi j'aimerais bien afficher un petit Timer (ou icone de chargement) le temps que les données soient chargées, puis afficher mon planning.

    Voici le code :

    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
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
     
    public class PremiersTestsGWTPage extends Page {
     
    	private List listeCellules;	//liste des cellules contenues dans la base
    	private Grid titres;	//la grille des titres
    	private GrilleGestionClics planning;	//la grille planning (gestions des clics)
    	private String tabJours[] = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"};
     
    	protected void createWidget(WidgetContainer container) {
     
    		AbsolutePanel abs = new AbsolutePanel();
     
    		//construction des titres
    		construireTitre();
    		//construction du planning
    		construirePlanning();
    		//récupération des cellules contenues dans la BDD
    		//et ajout dans la grille
    		recupCellulesTest();
     
     
    		//création du panel et ajout des widgets
    		FlowPanel listFlowPanel = new FlowPanel (); 
    		listFlowPanel.add(titres);
    		listFlowPanel.add(planning);
    		listFlowPanel.setWidth("815px");
     
    		abs.add(listFlowPanel, 30,30);
    		container.add(abs);
     
    	}
     
     
    	/**
             *construit la ligne de titre pour le planning
             * 
             */
    	private void construireTitre(){
                  //création de la ligne des titres
                  //pas d'intérêt pour ma question ;)
    	}
     
     
    	/**
             *construit les cases du planning
             * 
             */
    	private void construirePlanning(){
     
    		planning = new GrilleGestionClics(11, 8);
    		planning.setCellSpacing(0);
    		planning.setCellPadding(0);
    		planning.setWidth("100%");
    		planning.setStyleName("stylePlanning");
     
    		//ajout des tranches horaires
    		for(int i=0; i<11; i++){
    			planning.setText(i, 0, (i+9)+"h00 - "+(i+10)+"h00");
    			planning.getCellFormatter().setWidth(i, 0, "115px");
    		}
    	}
     
     
    	/**
             *recupere l'ensemble des cellules de tests contenues dans la BDD
             * et remplit la grille
             */
    	private void recupCellulesTest(){
    		GestionCellulesTestAsync gestionCell = GestionCellulesTest.Util.getInstance();
    		AsyncCallback callback = new AsyncCallback() {
    			public void onSuccess(Object result) {
    				//ok
    				listeCellules = (List)result;
    				remplirPlanning();
    		}
    		public void onFailure(Throwable caught) {
    			// méthode exécutée en cas d'erreur
    			Window.alert("erreur de communication avec le serveur : "
    					+caught.getMessage());
    		}
    		};
    		gestionCell.getAllCellTest(callback);
    	}
     
     
            /*
            *Remplit la grille avec les cellules contenues dans la liste
            *
            */
    	private void remplirPlanning(){
    		//ajout de cellules de test
    		//préparation de l'index de cellules, si nécessaire
    		int indexL=0;
    		//si la liste n'est pas null et pas vide :
    		if(listeCellules!=null && !listeCellules.isEmpty()){
    			for(int i=0; i<11; i++){
    				for(int j=1; j<8; j++){
    					//si liste pas null et pas vide
    					planning.setWidget(i, j, new CasePlanning((CelluleTest)listeCellules.get(indexL)));
    					indexL++;
     
    					}
    			}
    		}
    		//sinon, on crée une cellule vide et on l'ajoute à la base
    		else{
                           //là encore c'est pas le soucis...
    		}
    	}

    Merci d'avance

    PS : n'hésitez pas s'il vous faut plus d'infos...

  2. #2
    Membre éprouvé Avatar de Caroline76
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 94
    Par défaut
    En fait, le client ne peut pas savoir combien de temps la requete cote serveur va durer, donc je ne vois aucune possibilite d'avoir une estimation (timer, barre de chargement...) de cette duree (contrairement a un telechargement de donnees par exemple).
    Par contre, tu peux facilement donner un feedback en:
    - affichant quelque part un icone de style "please wait", un GIF anime par exemple. Tu actives cette image avant de d'appeler le servlet, et tu la desactives dans ta callback, lorsque tu affiches les donnees,
    - ou en changeant le curseur de la souris, en lui attachant le style "wait" (j'ai poste un code qui fait ca la semaine derniere dans la discussion "changer le pointeur de la souris").

  3. #3
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Par défaut
    Citation Envoyé par Caroline76 Voir le message
    En fait, le client ne peut pas savoir combien de temps la requete cote serveur va durer
    Ok, ça je m'en doutais, merci pour la confirmation

    Citation Envoyé par Caroline76 Voir le message
    Par contre, tu peux facilement donner un feedback en:
    - affichant quelque part un icone de style "please wait", un GIF anime par exemple. Tu actives cette image avant de d'appeler le servlet, et tu la desactives dans ta callback, lorsque tu affiches les donnees,
    - ou en changeant le curseur de la souris, en lui attachant le style "wait" (j'ai poste un code qui fait ca la semaine derniere dans la discussion "changer le pointeur de la souris").
    Ca me semble pas idiot du tout, je crois que je vais me rabattre sur cette solution. Je teste et je te tiens au courant.

    Merci

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Par défaut
    OK, les tests sont concluants avec le curseur (vraiment pas bête cette solution). Au pire des cas j'essaierai avec un petit gif qui va bien...

    Merci

  5. #5
    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
    Par défaut
    Bonjour, une petite précision ...

    Citation Envoyé par Caroline76 Voir le message
    En fait, le client ne peut pas savoir combien de temps la requete cote serveur va durer.
    Encore une fois, caroline a raison si effectivement tu ne sais pas du côté serveur combien de temps ton traitement dure ?

    En revanche, parfois, on peut savoir où il en est et donc fournir une estimation.

    Prenons l'exemple de l'upload de fichier (envoi du client vers le serveur). On ne peut connaitre le temps que cela prend dans l'absolu car cela dépend du réseau, de l'écriture disque du serveur, etc ... En revanche, tu sais via le contentLength de la requête d'upload la longueur du fichier et où le serveur en est de l'écriture. Il ne reste plus au serveur qu'à indiquer périodiquement au client à combien de % il se trouve (c'est le client qui lui demande avec une requête périodique ajax).

    Je ne connais pas exactement ton problème mais tu peux peut être estimer où tu en est ? La question est donc : Connais tu ton volume de données envoyés par le serveur avant qu'il ne soit envoyé ?

  6. #6
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Par défaut
    OK, je vois ce que tu veux dire, mais je ne pense pas pouvoir l'appliquer à ma situation.

    En fait, je construis mon grid puis j'y rajoute des cases. Les données contenues dans ces dernières sont récupérées depuis ma base via hibernate.
    En fait j'utilise une classe 'Cellule' mappée.

    Donc, dans un premier tant je récupère une liste de toutes mes cellules, puis je crée des cases avec les Cellules que j'ajoute au fur et à mesure au grid.

    Je ne vois pas bien comment je peux faire une estimation du temps de traitement.

    En revanche, si tu as lien intéressant sous la main en ce qui concerne le contentLength et la petite requête Ajax qui va bien, je suis preneur... ça peut toujours servir !

    Merci

  7. #7
    Membre éprouvé Avatar de Caroline76
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 94
    Par défaut
    Donc tu as un appel RPC par cellule si j'ai bien compris, et les cellules se remplissent au fur et a mesure, lors de la reception de la donnee correspondant a la cellule dans la callback.
    Dans ce cas, tu pourrais afficher un suivi de la reception (si tu as 50 cellules a remplir, et que tu en as deja rempli 10, tu sais que tu es a 20%).

  8. #8
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Par défaut

    Mais carrément!
    C'est vrai que le nombre total de cases est invariable(c'est d'ailleurs pour ça que j'avais pris un grid).
    J'étais parti dans l'optique d'estimer le temps nécessaire pour la récupération des données alors qu'en fait il me suffit de faire un calcul du nombre de cases crées au fur et à mesure!

    Merci

    PS : ta première solution était déjà tout à fait satisfaisante

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

Discussions similaires

  1. remplir grid avec requete sql
    Par Devlin111 dans le forum C#
    Réponses: 4
    Dernier message: 07/05/2012, 12h50
  2. [Débutant] remplir combobox avec donnée excel
    Par sniper59 dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/10/2011, 15h31
  3. Réponses: 0
    Dernier message: 27/06/2011, 11h36
  4. [MySQL] Remplir base avec données d'un tableau
    Par epoc.01 dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 06/03/2010, 07h48
  5. Remplir DataGridView avec données .txt
    Par House MD dans le forum VB.NET
    Réponses: 3
    Dernier message: 29/02/2008, 12h51

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