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 :

[JSP/JQuery/Servlet] Problème avec SendRedirect


Sujet :

Servlets/JSP Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut [JSP/JQuery/Servlet] Problème avec SendRedirect
    Bon mon soucis est un peu long a expliquer mais je pense que c'est un soucis tres commun mais je n'ai pas trouvé la solution tout seul.

    alors en gros j'ai ma JSP qui affiche un formulaire ,
    le bouton est un type "button" pas "submit" ( on verra pourquoi ^^ )(du coup pas de balise FORM)
    lorsque l'on clique sa active un JS qui envoie la requete POST a ma servlet,

    la servlet fait plein de verification et renvoie des messages derreur ( dans ce cas JS l'affiche dans le formulaire , truc du genre " invalid user " )
    ou bien s'il n'y a pas d'erreur la servlet continue les traitement et fait un SENDREDIRECT ,

    les message system.out.println saffiche tous dans la console de glassfish mais la page de mon browser ne change pas ... que se passe t il ?

    PS: j'ai mis button et pas submit sinon ma servlet est appelé deux fois et c'est la misere.

    merci beaucoup d'avance. Si vous avez besoin de codes je peux les poster mais il y en a un paquet.

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Citation Envoyé par wonay Voir le message
    alors en gros j'ai ma JSP qui affiche un formulaire ,
    le bouton est un type "button" pas "submit" ( on verra pourquoi ^^ )(du coup pas de balise FORM) mais il y en a un paquet.
    C'est pas parceque t'as pas de bouton submit que tu mettras pas de balise form, le bouton submit a juste la particularité de soumettre tout le formulaire dans lequel il est invoqué en appelant automatiquement l'action serveur, mais par souci (ou même contrainte de de validité du W3C) il te faut tout structurer dans une form.fais nous voir ton code jsp et la servlet appelée.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut
    J'avais tout posté mais cest beaucoup trop de codes, cest stupide. j'ai refait un exemple tout con :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    @Override
        public void doGet(HttpServletRequest request, HttpServletResponse response)
    					throws IOException, ServletException{
     
            System.out.println("Page: REINSTALL(GET)");
            Init(request, response);
     
            if(ParameterNumber == 0){
                System.out.println("Init REINSTALL Page");
                System.out.println("Lang = " + session.getAttribute("Lang").toString());
                request.setAttribute("LangCore", LangCore);
                if(InstallerXML.isAlreadySet()){
                    System.out.println("Setting Exists.");
                    dispatch = request.getRequestDispatcher("ReInstall.jsp");
                    dispatch.forward(request, response);
                    return;
                } else {
                    System.out.println("Setting NOT Exists.");
                    response.sendRedirect("INSTALL");
                    return;
                }
           }
        }
     
        @Override
        public void doPost(HttpServletRequest request, HttpServletResponse response)
    					throws IOException, ServletException{
     
            System.out.println("Page: REINSTALL(POST)");
            Init(request, response);
     
            if(request.getParameter("Reset") != null){
               boolean reset = (request.getParameter("Reset").compareToIgnoreCase("TRUE") == 0);
               System.out.println("Reset setting: " + reset);
               if(reset){
                   System.out.println("Delete setting. Success: " + InstallerXML.reset());
                   response.sendRedirect("INSTALL");
                   return;
               } else {
                   System.out.println("Canceled, go to login page.");
                   response.sendRedirect("LOGIN");
                   return;
               }
            }
            return;
        }
    JSP

    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
    <%@ include file="include/header.jsp" %>
    <LINK rel="stylesheet" href="design/ReInstall.css" type="text/css"/>
    <script src="js/ReInstall.js"></script>
    <%@ include file="include/headPage.jsp" %>
     
     
     
    <div class="Content">
    <div class="InstallDiv">
        <fieldset>
        <legend>Re<%= ((Lang)request.getAttribute("LangCore")).GetLangVersion("Install") %></legend>   
            <fieldset class="SubBorder">
                <legend class="IDTitle"><%= ((Lang)request.getAttribute("LangCore")).GetLangVersion("DBReset") %></legend>
                    <p class="PCenter">
                        <input id="ValidationResetDBButton" type="button" value="OK"/>
                        <input id="CancelResetDBButton" type="button" value="<%= ((Lang)request.getAttribute("LangCore")).GetLangVersion("Cancel") %>"/>
                    </p>
                    <p class="PCenter"><label class="ERROR" id="result_DB_display">&nbsp;</label></p>
            </fieldset>
        </fieldset>
            </div>
    </div>
     
    <%@include file="include/footer.jsp" %>
    JS

    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
    $(function(){
     
        $("input#ValidationResetDBButton").click(function(){
           var parameter = "Reset=" + true;
           SendInstallRequest(parameter,function(output){
     
            });
        });
     
        $("input#CancelResetDBButton").click(function(){
           var parameter = "Reset=" + false;
           SendInstallRequest(parameter,function(output){
     
            });
        });
     
    });
     
    function SendInstallRequest(params,f){
        var http = new XMLHttpRequest();
        var url = "REINSTALL";
     
        http.open("POST", url, false);
     
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        http.setRequestHeader("Content-length", params.length);
        http.setRequestHeader("Connection", "close");
     
        http.onreadystatechange = function() { //Call a function when the state changes.
                if(http.readyState == 4 && http.status == 200) {
                       f(http.responseText);
                }
        };
     
        http.send(params);
    }
    et mon log :

    La je vais sur ma page REINSTALL

    INFO: Page: REINSTALL(GET)
    INFO: Init REINSTALL Page
    INFO: Lang = EN
    INFO: Setting Exists.
    La je clique sur OK on reset les reglages
    INFO: Page: REINSTALL(POST)
    INFO: Reset setting: true
    INFO: Delete setting. Success: true
    La Servlet fait un SendRedirect vers INSTALL
    INFO: Page: INSTALL(GET)
    INFO: Init INSTALL Page
    INFO: Lang = EN
    INFO: Setting NOT Exists.
    mais a cette etape la page web n'a absolument pas changé je dois faire un refresh pour relancer le procédé et etre redirigé vers la page correct.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Mais où est le code de la fonction "f" ?

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut
    bah la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SendInstallRequest(parameter,function(output){
     
            });
    ici j'en ai pas besoin, il y a pas de traitement d'erreur possible c'est juste deux bouttons. OK / Cancel

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut
    Personne ne sait resoudre ce soucis ?

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut
    Je nai toujours pas resolu mon soucis

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    A la base, c'est le mécanisme AJAX que tu n'as pas compris...
    Tu fais un traitement asynchrone et tu voudrais que ta page change... syntaxe error ! L'ajax est fait justement pour ne pas quitter une page.
    Ton sendRedirect de la servlet ne sert strictement à rien.
    Si tu veux absolument faire les contrôles par AJAX, il faudra traiter le résultat OK et faire la redirection par javascript (window.location.replace(nouvelle URL)).
    Ceci dit, je ne vois pas trop l'intérêt... d'habitude, on soumet le formulaire, on test, si pas bon -> on le reaffiche, sinon, on passe à la suite.

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut
    Ok mais ds ce cas comment traité les erreurs de remplissage du formulaire ? Pour les afficher sans rafraichir la page. Et dans le cas dun remplissage correct etre rediriger vers la suite.

  10. #10
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Pour les messages d'erreurs, il y a plusieurs façons de faire.
    Une solution simple consiste à utiliser un objet que tu places dans le contexte request avant de redemander l'affichage de la page, ta page s'occupant de le mettre en forme.
    Sinon, si tout est OK, tu utilises response.sendRedirect(url);

  11. #11
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut
    Mais cette methode implique un rafraichissement de la page... Ce que je ne veux pas ^^

  12. #12
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Comment ça un rafraichissement de la page, que veux-tu dire ?

  13. #13
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut
    Peut etre que je nai pas compris ce que tu as dit mais ce que je comprend cest mettre un objet dans le request pour y passer les messages derreur. Mais sans rafraichir la page lobjet a beau changer laffichage reste le meme. Seul le javascript permet ( a ma connaissance ) de modifier laffichage de la page sans rafraichir.

  14. #14
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Ben, je ne vois surtout pas où est le problème avec le reaffichage...
    Normalement, tu as un bean qui contient les attributs liés à la page jsp.
    Ta page jsp utilise cet objet pour construire la réponse.
    Que tu affiches 1x ou 10x la page du moment que les informations contenues dans ce bean ne change pas, tu as le même "rendu".
    Si on part de l'origine, tu as :
    -> affichage de la page (bean vide) -> saisie des données dans le formulaire -> soumission du formulaire -> remplissage du bean -> contrôle :

    1) une erreur est détectée, on renvoie le bean pour la même page (qui pourrait contenir une liste d'erreurs)
    2) pas d'erreur, on fait le traitement suivant

    Il y a quelque chose qui te gène dans cette façon de faire ?

  15. #15
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut
    Mon objectif etait de remplir le formulaire et de pouvoir afficher des messages derreurs en live sans envoyer de requetes au serveur excepter une fois a la fin lorsque le formulaire est duement rempli

  16. #16
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Au fur et à mesure de la saisie ?

  17. #17
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 19
    Points : 4
    Points
    4
    Par défaut
    Ouaip

  18. #18
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Alors rien n'empêche d'avoir un flag dans la page et de faire n appels de méthodes AJAX pour les contrôles.
    Ensuite, tout dépend des contraintes de cette page. Si tous les champs doivent être remplis, ou seulement certains, etc...
    Détecter le moment où le formulaire doit (ou peut) être soumis n'est pas forcément évident...
    Dans tous les cas, ça n'empêche pas d'avoir un contrôle côté serveur qui sera activé lorsque la page sera soumise (ou alors tu masques le bouton de soumission)

  19. #19
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Citation Envoyé par wonay Voir le message
    Mon objectif etait de remplir le formulaire et de pouvoir afficher des messages derreurs en live sans envoyer de requetes au serveur excepter une fois a la fin lorsque le formulaire est duement rempli
    J'ai du mal à capter pourquoi ce post est autant rallongé . S'il veut faire des controles au fur et à mesure des saisies dans son formulaire sans appel serveur, c'est forcement du javascript qui prend la main, au sortir de chaque champ il peut activer un contrôle sur la saisie.t'as des tonnes d’événements js rattachés à chaque champ en fonction de ton besoin.

  20. #20
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    J'ai du mal à capter pourquoi ce post est autant rallongé . S'il veut faire des controles au fur et à mesure des saisies dans son formulaire sans appel serveur, c'est forcement du javascript qui prend la main, au sortir de chaque champ il peut activer un contrôle sur la saisie.t'as des tonnes d’événements js rattachés à chaque champ en fonction de ton besoin.
    Sauf qu'avec la ligne que tu viens de marquer, on se rend bien compte que ce n'est pas clair dans sa tête...

Discussions similaires

  1. Problème avec la redirection d'une page JSP avec ma servlet
    Par sasuki_mirak dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 23/03/2015, 14h19
  2. [débutant][servlet]Problème avec Servlet login
    Par stago dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 10/05/2005, 00h05
  3. [tomcat] [jsp] Problème avec driver OCI pour oracle
    Par nanardcompanie dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 01/07/2004, 09h54
  4. [struts][JSP][select] problème avec le select
    Par redge_touch dans le forum Struts 1
    Réponses: 4
    Dernier message: 14/01/2004, 10h05
  5. [jsp]problème avec request.getParameter(...)!
    Par fadoua dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 01/09/2003, 13h26

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