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 :

GWT json et flextable


Sujet :

GWT et Vaadin Java

  1. #1
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut GWT json et flextable
    Bonjour à tous, pourriez vous m'aider?

    Je récupère mes données de ma base et je les affiches dans un flextable avec un split pas franchement super, j'aimerai doncle faire avec du json.
    Sur mon serveur j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    rs = stmt.executeQuery("SELECT * FROM test");
    					res += "[\n";
    					while (rs.next()) {
    						String titre = rs.getString("id");
    						String description = rs.getString("descriptif");
    						res += "{\n\t";
    						res += "\"titre\":\""+titre+"\""; res += "\n\t";
    						res += "\"description\":\""+description+"\""; res += "\n}";
    						if(rs.next()) res += ",";
    					}
    					res += "\n]";
    comment je fais pour retourner du json à mon client? sachant que dans mon client c'est un string que j'attend du retour de ma fonction j:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public void onSuccess(String result) 
    				    {
     
    				     String[] ligne_base = result.split(";");
     
     
     
    				     for(int i = 0 ;i < ligne_base.length - 1;i++){
    				    	 taskContainer.setText(i+1,i%2,ligne_base[i]);
     
    				     }
    Avant je splité ma chaine mais cela posé problème j'aimerai récupérer du json et l'affiche dans mon flextable.

    Merci à vous bonne journée.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Attention déjà il y a plein de problème dans ton code coté serveur !!!

    • Tu ne fermes pas ton ResultSet (ni probablement ton Statement et ta Connection).
      Cela peut bloquer ton serveur sur le long terme.
      Il faut utiliser un try-with-ressource (ou un try/finally avec les vieux Java).
    • Tu utilises deux fois rs.next() dans ta boucle.
      Chaque rs.next() déplace le curseur sur la ligne suivante, donc tu sautes une ligne sur 2 !
    • Tu concatènes des chaines avec += dans une boucle !
      Cela crée des objets temporaires de manière exponentielle. Cela peut être vraiment très gourmand si ton lot de données augmente !
      Il faut utiliser StringBuilder à la place.



    Bref tu devrais plutôt utiliser quelques chose comme ceci :
    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
    		StringBuilder res = new StringBuilder();
    		try (ResultSet rs = stmt.executeQuery("SELECT * FROM test")) {
    			res.append("[\n");
    			if (rs.next()) {
    				while (true) {
    					String titre = rs.getString("id");
    					String description = rs.getString("descriptif");
     
    					res.append("{\n\t")
    						.append("\"titre\":\"").append(titre).append("\"\n\t")
    						.append("\"description\":\"").append(description).append("\"\n}");
    					if (rs.next()) {
    						res.append(",");
    					} else {
    						break;
    					}
    				}
    			}
    		}

    A noter que pour générer du JSON il serait préférable d'utiliser une librairie adapté, sinon tu pourrais avoir des soucis avec des caractères invalides...






    Sinon... je n'ai pas compris quel était ton problème en fait...



    a++

  3. #3
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    Merci pour votre aide, désolé je vais être plus précis je ne vois pas comment côté client récupérer mon résultat et le mettre en forme dans le flextable cellule colonne et ligne.
    car côté client quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      public void onSuccess(String result) 
    				    {
     
    				     String[] ligne_base = result.split(";");
     
     
     
    				     for(int i = 0 ;i < ligne_base.length - 1;i++){
    				    	 taskContainer.setText(i+1,i%2,ligne_base[i]);
     
    				     }
     
    				    }
    je splité mon string avec ";" mais je n'afficher que des lignes avec descriptif et titre en même temps moi j'aimerai:
    ligne 1 : cellule 1 premier titre| cellule 2 descriptif
    ligne 2 : cellule 2 second titre| cellule 2 descriptif 2

    voici ma classe entière client
    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
    package project.client;
     
    import project.client.ProjectService;
    import project.client.ProjectServiceAsync;
     
    import com.google.appengine.labs.repackaged.org.json.JSONArray;
    import com.google.appengine.labs.repackaged.org.json.JSONObject;
    import com.google.gwt.core.client.EntryPoint;
    import com.google.gwt.core.client.GWT;
    import com.google.gwt.core.client.JsonUtils;
    import com.google.gwt.user.client.Window;
    import com.google.gwt.user.client.rpc.AsyncCallback;
    import com.google.gwt.user.client.ui.FlexTable;
    import com.google.gwt.user.client.ui.IsWidget;
    import com.google.gwt.user.client.ui.RootPanel;
    import com.google.gwt.user.client.ui.TextBox;
    import com.google.gwt.user.client.ui.VerticalPanel;
    import com.google.gwt.event.dom.client.ClickEvent;
    import com.google.gwt.json.client.JSONParser;
    import com.google.gwt.json.client.JSONValue;
     
    public class Project  implements EntryPoint {
     
    	private VerticalPanel vPanel = new VerticalPanel();
    	//tableau contenant mes éléments pour l'affichage
    	private FlexTable taskContainer = new FlexTable();
    	@Override
    	public void onModuleLoad() {
    		// TODO Auto-generated method stub
    		taskContainer.setCellSpacing(0);
    		taskContainer.setCellPadding(0);
    		taskContainer.setWidth("100%");
    		taskContainer.setText(0, 0, "Titre");
    		taskContainer.setText(0, 1, "Description");
    		taskContainer.setStyleName("flextable");
    		RootPanel.get().add(vPanel);
    		RootPanel.get().add(taskContainer);
    		final ProjectServiceAsync getService = GWT.create(ProjectService.class);
    		getService.connection( new AsyncCallback<String>() 
    				   {
    				    public void onFailure(Throwable caught) 
    				    {
    				     System.out.println("error");
    				    }
     
    				    public void onSuccess(String result) 
    				    {
     
    				     String[] ligne_base = result.split(";");
     
     
     
    				     for(int i = 0 ;i < ligne_base.length - 1;i++){
    				    	 taskContainer.setText(i+1,i%2,ligne_base[i]);
     
    				     }
     
    				    }
    				   });
    	}
     
    }
    quelque chose comme le tableau de l'exemple de gwt http://www.gwtproject.org/doc/latest/tutorial/JSON.html
    Par contre côté serveur mon string est vide maintenant si dans mon 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
    stmt = conn.createStatement();
    							StringBuilder res = new StringBuilder();
    							try (ResultSet rs = stmt.executeQuery("SELECT * FROM test")) {
    								res.append("[\n");
    								if (rs.next()) {
    									while (true) {
    										String titre = rs.getString("id");
    										String description = rs.getString("descriptif");
     
    										res.append("{\n\t")
    											.append("\"titre\":\"").append(titre).append("\"\n\t")
    											.append("\"description\":\"").append(description).append("\"\n}");
    										if (rs.next()) {
    											res.append(",");
    										} else {
    											break;
    										}
    									}
    								}
    							}
     
     
    				}catch(Exception e){
    					e.printStackTrace();
    				} 
    				System.out.println(res+"tout va bien");
    				return res;
    Dans ma console j'ai bien écrit tout va bien mais rien d'autre, seriez vous ou est le problème s'il vous plaît?
    Merci encore pour votre aide.

  4. #4
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    Sinon personne n'aurait un exemple de données récupéré du côté serveur et affichait côté client sous forme de flextable? Merci à vous

  5. #5
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    Finalement je split et j'affiche dans mon flextable selon le tour de boucle merci à vous.

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

Discussions similaires

  1. gwt /html /json
    Par aminebk dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 13/07/2010, 13h47
  2. json et php gwt
    Par aminebk dans le forum GWT et Vaadin
    Réponses: 0
    Dernier message: 02/07/2010, 16h36
  3. GWT - Json et Bdd + grid
    Par erox44 dans le forum GWT et Vaadin
    Réponses: 4
    Dernier message: 20/03/2009, 11h48
  4. GWT + JSON + PHP
    Par Space23 dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 06/03/2009, 12h16
  5. Prise en main de JSON avec GWT
    Par GroXx dans le forum GWT et Vaadin
    Réponses: 5
    Dernier message: 05/02/2009, 13h47

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