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

jQuery Discussion :

Envoyer un ArrayList<Objet> selon notation Gson [AJAX]


Sujet :

jQuery

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 68
    Points : 53
    Points
    53
    Par défaut Envoyer un ArrayList<Objet> selon notation Gson
    Je veux envoyer un ArrayList de type objet(TrackArtiste) de ma servlet à mon code ajax en utilisant la notation Gson:

    Code java : 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
    PrintWriter out = response.getWriter();
    UserBean user = new UserBean();
    user.setUserName(request.getParameter("user"));
    user.setPassword(request.getParameter("pwd"));
    Gson gson = new Gson();
    JsonObject myObj = new JsonObject();
    //myObj.addProperty("user", "appachito");
    //TrackArtiste ta=new TrackArtiste("001","track","artiste","artisteLastFm",3,"","");
    ArrayList<TrackArtiste> maListe=new ArrayList<TrackArtiste>();
    TrackArtiste ta=new TrackArtiste();
    ta.setCodeVerse("_0");
    ta.setTrack("track");
    ta.setArtiste("artiste");
    ta.setPlayCount("123");
    maListe.add(ta);
     
    ta=new TrackArtiste();
    ta.setCodeVerse("_0");
    ta.setTrack("track1");
    ta.setArtiste("artiste1");
    ta.setPlayCount("40");
    maListe.add(ta);
    //JsonElement liste = gson.toJsonTree(maListe);
     
    JsonElement element = gson.toJsonTree(maListe, new TypeToken<List<TrackArtiste>>() {}.getType());
    JsonArray jsonArray = element.getAsJsonArray();
    myObj.add("liste",jsonArray);
    out.println(myObj.toString());
    System.out.println(myObj);

    Ma servlet construit bien mon arrayList et le coder en Gson, et voici le contenu de la console:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"liste":[{"track":"track","artiste":"artiste","codeVerse":"_0","playCount":"123"},{"track":"track1","artiste":"artiste1","codeVerse":"_0","playCount":"40"}]}
    Dans ajax, je vais exploiter mon arraList<TrackArtiste> pour construire des liens(balises a), du coup j'ai fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    success: function(data){
    	$("#playlist").html("");
    	$.each(data, function(indice){
    		$("#playlist").append("<a rel='0' id='"+data.liste.codeVerse+"'>"+data.liste.track+":"+data.liste.artiste+"</a>");
     
    	})
    ..........
    Soucis1: Mon ArrayList est composé de deux objets, alors que j'ai un seul lien au lien de deux.(comme si la boucle ne fonctionne pas parfaitement
    soucis2:au lien d'avoir le contenu des attribut de mon objet, j'ai des indefined

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    Je ne sais pas si j'ai tout bien compris mais en créant des serializer pour tes objets TrackArtiste et UserBean dans le style :

    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
     
     
    public enum TrackArtiste Serializer implements JsonSerializer<TrackArtiste >
    {
     
    	INSTANCE;
     
    	@Override
    	public JsonElement serialize( TrackArtiste ta, Type type, JsonSerializationContext serializer )
    	{
    		GsonBuilder gsonBuilder = new GsonBuilder();
    		Gson gson = gsonBuilder.create();
    		JsonObject jsonObject = new JsonObject();
                ...
     
                    return jsonObject;
           }
    }

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 68
    Points : 53
    Points
    53
    Par défaut
    j'ai pas compris ce que vous voulez dire par le code que tu as mis.

    si c'est possible, explique moi ce signifie sinon envois moi un lien qui traite mon probléme.

    Merci

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 119
    Points
    44 119
    Par défaut
    Bonjour,
    ton retour est de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    liste[0] = {
      artiste: "artiste",
      codeVerse: "_0",
      playCount: "123",
      track: "track"
    }
    liste[1] = {
      artiste: "artiste1",
      codeVerse: "_0",
      playCount: "40",
      track: "track1"
    }
    donc quand tu fais data.liste.codeVerse cela plante, il te faut à minima faire un data.liste[0].codeVerse.

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 68
    Points : 53
    Points
    53
    Par défaut
    oui ta solution résoud mon deuxième soucis. Mais il me reste le probleme de la boucle parce que dans ajax une seule balise a est construite alors que qu'il devrait être deux balises a puisque mon ArrayList contient deux objets

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 119
    Points
    44 119
    Par défaut

    ...et avec ton $.each tu ne sais pas faire une boucle !

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 68
    Points : 53
    Points
    53
    Par défaut
    justement, c'est ça le probléme, avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $.each(data, function(indice)
    et ça m'affiche un seul lien.

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 119
    Points
    44 119
    Par défaut
    Je vois que tu as lu la documentation avec attention

    La boucle il te faut la faire sur data.liste et non sur data.

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

Discussions similaires

  1. Envoyer a BIRT un objet en parametre
    Par ahlem83 dans le forum BIRT
    Réponses: 2
    Dernier message: 28/07/2009, 10h23
  2. Réponses: 1
    Dernier message: 14/05/2007, 23h31
  3. comparer des ArrayList d'objets
    Par Empty_body dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 26/01/2007, 08h26
  4. La fin du For et des ArrayList d'objets ?
    Par Regis.C dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 28/11/2006, 14h46
  5. [C#] Copier un ArrayList d'objets
    Par ahedev dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/11/2004, 12h14

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