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

Servlets/JSP Java Discussion :

Récupérer du gson sur une jsp


Sujet :

Servlets/JSP Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Récupérer du gson sur une jsp
    Bonjour,

    J'essaie depuis quelques jours de récupérer un objet Gson sur ma jsp.
    Les données concernées de mysql sont bien récupérées par ma servlet, je peux le voir lorsque je suis en debug. Mais une fois converti en json (Gson) je n'arrive pas à récupérer mon objet sur la jsp.
    Je souhaite récupérer ces données dans une variable Javascript au sein de la jsp.

    Voici ma servlet:


    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
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("application/json");
     
            PrintWriter out = response.getWriter();
     
                DataService ds = new DataService();
     
                Collection licencesList = null;
                try {
                    licencesList = ds.getLicences();
                } catch (ObjectNotFoundException ex) {
                    Logger.getLogger(LicenceServlet.class.getName()).log(Level.SEVERE, null, ex);
                }
                DataTables dt = LicenceDatatables.getMainObject(licencesList);
     
     
                Gson gson = new GsonBuilder().setPrettyPrinting().create();
                String json = gson.toJson(dt);
                out.print(json);
                out.flush();
                out.close();
    Comme je le disais, je récupère bien les données sur cette servlet via le DataService. Je place ensuite ces données dans un objet DataTables que je convertie en Json. Jusque la tout semble aller, je vois bien en mode debug que l'instance de l'objet DataTables dt et convertie en json... Puis je l'envoie vers le client via "out.print(json);"


    Voila ma jsp avec le script js pour récupérer le json:


    Code jsp : 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
    <!DOCTYPE html>  
    <html>  
        <head>  
            <script src="js/jquery-1.8.1.js" type="text/javascript"></script>
            <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
            <script type="text/javascript" src="https://cdn.datatables.net/r/bs-3.3.5/jqc-1.11.3,dt-1.10.8/datatables.min.js"></script>
            <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>  
            <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
            <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/r/bs-3.3.5/jq-2.1.4,dt-1.10.8/datatables.min.css"/>  
            <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.15/css/jquery.dataTables.min.css"/>  
     
     
        </head>  
        <body>  
                <script type="text/javascript">
                $(document).ready(function(){
                    $.ajax({
                        type:'GET',
                        url:'http://localhost:8080//myurl/licences',
                        headers: {
                            Accept: "application/json; charset=utf-8",
                            "Content-Type" : "application/json; charset=utf-8"
                        },
                        success: function (dt) {
                            var dataTablesObj = $.parseJSON(dt);
                            alert(dt.columns);
                        }
                    })
                });
                    </script>
    </body>
    </html>
    Je reçois une erreur coté client :
    Uncaught SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)

    Je suis assez nouveau en gson et jsp si quelqu'un à une idée ce serait vraiment super.
    Merci

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    à quoi correspond ce $? Quelle librairie? En général sur les requetes http, dans le success, on ne recoit pas les donnée, mais un objet englobant les headers de réponse, le code http, et les données dans le champ data. As-tu regardé ce qu'il y avait dans ton dt en mettant un breakpoint au niveau de ton navigateur?

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Déjà, tu peux voir l'allure que ce que ta servlet génère en tapant l'url directement dans un navigateur, ce qui te permettra de voir qu'à priori ce n'est pas du JSon que tu génères. Ce qui peut aider à comprendre le souci.

    Ensuite, normallement, tu n'as pas besoin de parser explicitement le résultat. JQuery parsera directement le JSon, vu que le ContentType est application/json. Donc dt est normalement déjà un objet JavaScript. Je ne sais pas comment se comporte $.parseJSON(dt) si on lui passe un objet JavaScript, mais le souci pourrait être là.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Je ne sais pas comment se comporte $.parseJSON(dt) si on lui passe un objet JavaScript, mais le souci pourrait être là.
    Il va parser la String "[object]", ce qui explique l'erreur de o en position 1

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Il va parser la String "[object]", ce qui explique l'erreur de o en position 1
    CQFD, donc.

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour ces explications, je comprend déjà mieux l'erreur, effectivement si JQuery parse directement le JSon ça change tout!

    Juste pour plus de détails voila ce que la servlet génère :

    Nom : Capture d’écran (1)_LI.jpg
Affichages : 702
Taille : 313,9 Ko
    Oui c'est pas très beau mais ce sont des données ultra confidentielle (genre...)

    Du coup n'ayant jamais non plus récupéré d'objet Javascript sur une jsp serait-il possible que quelqu'un me propose une façon de faire ?

    Encore merci vous êtes vraiment super!

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    De deux choses l'une :

    1. Soit c'est le client qui doit traiter l'objet, et, donc, tu fais ce que tu as fait (Requête ajax avec JQuery, sans parser explicitement le JSon) et tu manipules ton objet en JavaScript/JQuery (ce n'est plus un problème Java, mais JavaScript — Personnellement, je peux t'aider dans la mesure du possible parce que je touche à ça depuis quelques semaines, mais j'ai encore des lacunes, et tu auras probablement de meilleures réponses sur le forum JavaScript).
    2. Soit tu veuc manipuler le résultat de la requête en Java dans la JSP, et
      • Tu peux récupérer et manipuler directement le DataTables (Une JSP c'est en faite une Servlet avec une syntaxe spéciale, mellant du texte et des balises particulières (les <% %> (Scriptlet) et consorts). Dans les Scriptlets, tu peux écrire du code Java.
      • tu peux aussi faire une requête vers ta servlet (ou un include), donc récupérer le JSon,
        • le parser avec GSon et manipuler un objet Java
        • le parser avec GSon et un adapteur pour récupérer un DataTables et manipuler un DataTables

        mais c'est faire un truc un peu tordu et compliqué, alors que manipuler directement le DataTables sera bien plus simple


  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut

    Oui je voudrai effectivement que ce soit le client qui traite l'objet, je vais donc voir pour faire ça sans parser explicitement... Peut être demander du coté de Javascript si je ne trouve pas la solution.

    Merci pour ces conseils c'est vraiment sympa !

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    En JavaScript, pour accèder aux propriétés de l'objet, c'est comme en Java en fait. Pour accèder à une propriété toto d'un objet dans la variable x : x.toto.
    Il se peut qu'il y ait certaines proprétés dont le nom soit en collision avec un mot clef, ou une constante (les nombres par exemple, je pense). On peut y accèder comme ça : x["var"].
    Pour les parcours, regarde $.each() de JQuery.

Discussions similaires

  1. Récupérer un objet sur une jsp et le renvoyer sur une autre
    Par marooned dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 01/02/2013, 14h23
  2. Réponses: 1
    Dernier message: 02/01/2011, 21h57
  3. Réponses: 14
    Dernier message: 14/03/2005, 10h16
  4. [Servlet] récupérer les champs d'une jsp
    Par phoebe dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 12/05/2004, 17h32
  5. [debutant]renvoyer sur une jsp depuis une servlet
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 23/03/2004, 12h55

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