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 :

Problème redirection vers une page JSP


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Problème redirection vers une page JSP
    Bonjour,
    Je souhaites rediriger ma page après modification sur un étudiant vers la page index mais j'ai ce message d'erreur :
    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
    Type Rapport d''exception
     
    message java.lang.NullPointerException
     
    description Le serveur a rencontré une erreur interne qui l''a empêché de satisfaire la requête.
     
    exception
     
    org.apache.jasper.JasperException: java.lang.NullPointerException
    	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:594)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:510)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
     
    cause mère
     
    java.lang.NullPointerException
    	org.apache.jsp.Index_jsp._jspService(Index_jsp.java:111)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:472)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)


    Voila le code de la servlet qui s'occupe de la modification :
    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
    30
    31
    32
    33
    34
    35
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
     
    		String cne = request.getParameter("cne");
    		System.out.println(cne);
    		Etudiant etudiant = new EtudiantDAO().rechercherEtudiant(cne);
    		System.out.println(etudiant);
    		request.setAttribute("etudiant", etudiant);
    		RequestDispatcher rd = request.getRequestDispatcher("ModifierForm.jsp");
    		rd.forward(request, response);
     
    	}
     
    	/**
             * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
             *      response)
             */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
     
    		String cne= request.getParameter("cne");
     
    		String nom =request.getParameter("nom");
     
    		String prenom =request.getParameter("prenom");
     
    		String dateNaissance = request.getParameter("dateNaissance");
     
    		String lieu = request.getParameter("lieu");
     
    		Etudiant e=new Etudiant(cne,nom,prenom,dateNaissance,lieu);
    		new EtudiantDAO().modifierEtudiant(e);
     
    		response.sendRedirect("Index.jsp");
    	}


    Voila le code de ma page Index.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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    	pageEncoding="ISO-8859-1"%>
    <%@ page import="java.util.*"%>
    <%@ page import="ma.noteactivite.entities.*"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="ISO-8859-1">
    <!-- Le styles -->
    <link href="static/css/bootstrap.css" rel="stylesheet">
    <title>Insert title here</title>
    </head>
    <body>
    	<%
                    Collection<Etudiant> et = (Collection<Etudiant>) request.getAttribute("etudiants");
            %>
    	<table class="table" width="100%" border="1">
    		<tr>
    			<th>CNE</th>
    			<th>Nom</th>
    			<th>Prenom</th>
    			<th>Date</th>
    			<th>Lieu</th>
    		</tr>
    		<%
                            for (Etudiant e : et) {
                    %>
     
    		<tr>
     
    			<th><%=e.getCne()%></th>
    			<th><%=e.getNom()%></th>
    			<th><%=e.getPrenom()%></th>
    			<th><%=e.getDateNaissance()%></th>
    			<th><%=e.getLieu()%></th>
    			<th><a class="btn btn-primary" name="supprimer">Supprimer</a><a
    				href="modifierEtudiant?cne=<%=e.getCne()%>" class="btn btn-success"
    				name="modifier">Modifier</a></th>
    			<%
                                    }
                            %>
    		</tr>
    	</table>
    </body>
    </html>


    Merci d'avance

  2. #2
    Modérateur

    Salut,

    Dans ta jsp, tu vas chercher un attribut de requête nommé etudiants :

    Code jsp :Sélectionner tout -Visualiser dans une fenêtre à part
    Collection<Etudiant> et = (Collection<Etudiant>) request.getAttribute("etudiants");

    puis tu parcours cette collection :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    for (Etudiant e : et) {

    C'est là probablement qu'a lieu la NullPointerException.

    Mais dans le post, là où se fait le forward, il n'y a pas de <scope >= request>.setAttribute("etudiants", quelque chose de pas null)... si cette collection n'est pas mis en attribut dans un scope > request (session, application), ailleurs, l'attribut n'existe pas, donc sa valeur est null.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre régulier
    Bonjour,

    Je récupère ma liste d'étudiant à l'aide d'une autre servlet et l'attribut etudiants c'est la récupération de la liste d'étudiant de la base de donnée
    Code Java :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		Collection <Etudiant> etudiants = new EtudiantDAO().rechercherToutEtudiant();
    		for (Etudiant et: etudiants)
    		{
    			System.out.println(et.getNom());
    		}
    		request.setAttribute("etudiants", etudiants);
    		RequestDispatcher rq = request.getRequestDispatcher("Index.jsp");
    		rq.forward(request, response);
    	}


    la page Index.jsp s'affiche bien au début au lancement du site c'est au moment de la redirection après la modification que j'ai ce message

  4. #4
    Modérateur

    Les attributs de scope request sont justement visibles uniquement par la requête qui les a affecter. Tu ne peux pas faire un request.setAttribute("x", value) dans une requête, et le récupérer dans une autre. Si les servlets ne sont pas chaînées par forward dans la même requête, ce sont des requêtes différentes.

    Ce que tu peux faire c'est faire une servlet dont le but est d'engager la vue Index.jsp, avec les données nécessaires (mise en attribut par la servlet) et forwarder vers cette servlet. Ou alors, il faut que les deux servlets le fassent. Bien sûr ce serait plus simple de charger les données dans la jsp (donc pas d'attribut), mais la jsp étant du domaine de la vue (MVC), on ne devrait pas. Donc c'est bien que ça soit des servlets qui se chargent de ça. Mais ce n'est pas parce qu'une servlet le fait, que l'attribut est disponible lorsque le forward vers Index.jsp est fait par une autre.
    Si les données ne sont pas contextuelles à une requête, tu peux aussi mettre l'attributs en session. Il faut juste bien penser à le mettre à jour à chaque fois qu'il est modifié. Ce qui n'est pas évident en multi utilisateurs.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre régulier
    Oui c'est vrai, je redirigais vers une page jsp alors que la liste se remplit depuis la servlet
    J'ai fais la redirection vers la servlet qui rempli la liste à partir de la base de donnée est sa fonctionne
    Merci