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

JavaScript Discussion :

[AJAX] Comment recuperer la propriété d'un objet Java avec XmlHttpRequest ?


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 81
    Points
    81
    Par défaut [AJAX] Comment recuperer la propriété d'un objet Java avec XmlHttpRequest ?
    Bonjour,
    j'essaie de m'entrainer sur Ajax en utilisant directement XmlHttpRequest au lieu d'un framework, j'arrive à recuprer un text simple et l'afficher avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xmlHttpVar.responseText;
    mais je ne sais pas comment faire pour recuperer les propriété d'un objet Java, par exemple un objet User qui a les propriétés nom et prenom.
    Merci d'avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est quoi la question ? Quel est le rapport entre Ajax qui est du JavaScript (côté client, donc) et Java qui tourne selon toute vraisemblance côté serveur ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 81
    Points
    81
    Par défaut
    voilà, j'ai une classe User:
    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
     
    public class User {
        private String name;
        private String firstname;
        private String color;
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public String getFirstname() {
            return firstname;
        }
     
        public void setFirstname(String firstname) {
            this.firstname = firstname;
        }
     
        public String getColor() {
            return color;
        }
     
        public void setColor(String color) {
            this.color = color;
        }
    }
    Dans mon action je fais çà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            User user=new User();
            user.setColor("Bleu");
            user.setFirstname("Pierre");
            user.setName("Dupont");
            ServletActionContext.getResponse().setContentType("text/html");
            PrintWriter out = ServletActionContext.getResponse().getWriter();
            out.println(user);
            out.flush();

    çà ne marche pas encore mais je vais afficher les proprités name et color dans ma page de cette façons:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     function processStateChange(){
            if (xmlHttpVar.readyState == 4)  { // Complete
                if (xmlHttpVar.status == 200)  { // OK response
                    var  user =xmlHttpVar.responseText;
                    alert(user.Name);
                    aler(user.Color);
                   } else { // Pour le debug
                     alert("Problem: " + xmlHttpVar.statusText);
                     alert("status: " + xmlHttpVar.status);
                   }
            }
        }

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 81
    Points
    81
    Par défaut
    Est-ce que c'est plus clair maintenant ?

  5. #5
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    OK, maintenant je vois le pb. En fait, xmlHttpVar.responseText renvoie une chaîne de caractères qui correspond à la réponse du serveur sans interprétation de cette chaêne de caractères. Du coup, si tu veux extraire des données de cette chaîne de caractères, il faut que tu la "parses".

    Elle vaut quoi exactement, cette chaîne de caractères ? Avec Ajax, l'idée c'est que le serveur renvoie du code XML qui peut être parsé facilement grâce aux fonctionnalités DOM de JavaScript. Ainsi, si ton serveur renvoie (avec "text/xml" comme content type, c'est mieux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" ?>
    <user>
      <color>Bleu</color>
      <firstname>Pierre</firstname>
      <name>Dupont</name>
    </user>
    et que tu récupères ça avec la méthode xmlHttpVar.responseXML (et pas xmlHttpVar.responseText) qui renvoie un object DOM, tu peux appliquer des méthodes simples telles que getElementsByTagName('color').item(0) pour récupérer le noeud DOM qui correspond à <color>Bleu</color> ("Bleu" se récupère alors avec un nodeValue, je pense).

    Va voir ici, c'est pas mal expliqué.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 81
    Points
    81
    Par défaut
    Merci énormément pour ton aide !!

  7. #7
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Ben de rien, on est là pour ça

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 81
    Points
    81
    Par défaut
    Juste une dernière question, est-ce qu'il faut que je sérialise à la main mon objet user en XML avant de l'envoyer dans la réponse?

  9. #9
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Oui et non. Tu dois avoir des API du style JAXB mais je ne sais pas comment ça s'utilise et c'est peut-être une usine à gaz par rapport à ton besoin. Si tu as plusieurs Beans à sérialiser, oui, ça pourrait être intéressant d'investiguer le sujet, mais si tu en as que quelques uns, tu peux implémenter une méthode toString() qui renvoie un XML simple que tu construis toi-même ou faire ton propre "sérialiseur" (classe externe ou classe abstraite dont tu fais hériter tous tes Beans et qui implémente toString()) en jouant sur l'introspection pour récupérer le nom des attributs des classes et contruire le XML idoine.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 81
    Points
    81
    Par défaut
    Merci , j'ai trouvé sur les tutoriaux developpez.com l'API XStream qui est pas mal et surtout très simple à utiliser pour sérializer les objet en XML.

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

Discussions similaires

  1. [Type "var"] Comment récupérer les propriétés de l'objet ?
    Par Firedeal dans le forum Framework .NET
    Réponses: 7
    Dernier message: 31/07/2008, 22h57
  2. Réponses: 3
    Dernier message: 06/07/2007, 09h17
  3. [AJAX] Comment recuperer des variable
    Par Emcy dans le forum Général JavaScript
    Réponses: 45
    Dernier message: 28/11/2006, 09h21
  4. [C#] Comment récupérer le nom d'un objet ?
    Par TERRIBLE dans le forum C#
    Réponses: 3
    Dernier message: 29/10/2006, 11h03
  5. Réponses: 6
    Dernier message: 24/08/2006, 12h17

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