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 :

[Debutant] Données nulles de JSP vers Servlet method Post


Sujet :

Servlets/JSP Java

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Points : 210
    Points
    210
    Par défaut [Debutant] Données nulles de JSP vers Servlet method Post
    Bonjour,

    je poursuis ma découverte de ces nouvelles technos avec une nouvelle question. Je dispose d'une page FicheAbonne.jsp qui correspond à remplir différents champs pour un abonné (nom, prenom ...). Cette page contient un bouton de sauvegarde des informations dont certaines ne doivent pas être vides. Quand les informations sont correctement renseignées, l'enregistrement est bien pris en compte (je ne fais pour le moment que de la modification d'enregistrement). En revanche, quand un champ est non rempli (par exemple le nom), la page est réaffichée (par ma servlet) mais des champs ont maintenant la valeur null (les champs en disabled) ou les checkbox se décochent. Je vous mets ci-dessous ma servlet et ma page JSP.
    Si l'un d'entre vous a une idée ou une question, n'hésitez pas.

    Merci d'avance


    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    package servlet;
     
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.Vector;
     
    import hibernate.*;
    import hibernateMain.HibernateUtil;
     
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
     
    import java.util.List;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.swing.JOptionPane;
     
    public class ServletAbonne extends HttpServlet {
     
    	 /**
    		 * 
    		 */
    		private static final long serialVersionUID = -559546873832531359L;
    		// paramètres d'instance
     
     
    		public static Vector<Abonne> v;		
    		public static Session session;
     
    		//	init
    		public void init() {
     
    			 session = HibernateUtil.currentSession();		 
    			 Query myQuery = session.createQuery("From Abonne");
    	         List result = myQuery.list();	       
    	         v = new Vector<Abonne>();	        
    			 for (Iterator it = result.iterator(); it.hasNext();) {					
    				 v.addElement((Abonne) it.next());					 
    			 }								
     
    		}
     
     
    		//GET
    		/*public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException {
     
    		}*/
     
    		/**
    		 * 	@param request la requête HTTP du client
    		 *	@param response la réponse HTTP qu'on va construire
    		*/
    		public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    			// 	on passe la main au GET
    			//doGet(request, response);
    			String id = request.getParameter("txtId");
    			String nom = request.getParameter("txtNom");
    			String prenom = request.getParameter("txtPrenom");
    			String pwd = request.getParameter("txtPwd");
    			String user = request.getParameter("txtUser");
    			String telephone = request.getParameter("txtTelephone");
    			String mail = request.getParameter("txtMail");
    			String competences = request.getParameter("txtCompetences");
    			String actif= request.getParameter("ckActif");
    			String admin= request.getParameter("ckAdmin");
    			String datecreation= request.getParameter("txtDateCreation");
     
    			if (!(nom.equals("")) && !(prenom.equals("")) && !(pwd.equals("")) && !(user.equals(""))) {
    				// Message de confirmation de la sauvegarde
     
    				Transaction tx = session.beginTransaction();
     
    				Abonne abonne = (Abonne) session.load(Abonne.class, new Integer(id));
     
    				abonne.setAbonneUser(user);
    				abonne.setAbonnePwd(pwd);
    				abonne.setAbonneNom(nom);
    				abonne.setAbonnePrenom(prenom);
    				abonne.setAbonneTelephone(telephone);
    				abonne.setAbonneMail(mail);
    				abonne.setAbonneCompetences(competences);
    				abonne.setAbonneMail(admin);
    				abonne.setAbonneCompetences(actif);
    				abonne.setAbonneMail(mail);
    				abonne.setAbonneCompetences(competences);
    				session.save(abonne);
     
    				tx.commit();
     
    				//JOptionPane.showMessageDialog(null,"Abonné enregistré !");				
    				System.out.println("L'abonné est bien enregistré");
    				getServletContext().getRequestDispatcher("/JSP/Abonne.jsp").forward(request,response);
     
    			} else {
    				// Message d'erreur : Abonné non sauvegardé
    				System.out.println("Veuillez remplir les champs User, Password, Nom et Prenom !");				
    				getServletContext().getRequestDispatcher("/JSP/FicheAbonne.jsp").forward(request,response);
    			}
     
    		}
     
    }

    Ma page FicheAbonne.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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    <%@ page language="Java" %>
    <%
    // on récupère les données nom, age et urlRetour nécessaire à l'affichage de la page
    String id=(String)request.getParameter("txtId");
    String user=(String)request.getParameter("txtUser");
    String pwd=(String)request.getParameter("txtPwd");
    String nom=(String)request.getParameter("txtNom");
    String prenom=(String)request.getParameter("txtPrenom");
    String telephone=(String)request.getParameter("txtTelephone");
    String mail=(String)request.getParameter("txtMail");
    String competences=(String)request.getParameter("txtCompetences");
    String actif=(String)request.getParameter("ckActif");
    String admin=(String)request.getParameter("ckAdmin");
    String datecreation=(String)request.getParameter("txtDateCreation");
    System.out.println(datecreation+"    "+admin);
     
    %>
    <html>
    <head>
    <title>Fiche de l'abonné</title>
    <LINK REL="StyleSheet" HREF="./../CSS/styles.css" TYPE="text/css">
    </head>
    <body>
    <% 
                    String repass = request.getParameter("alreadypassed");
    %>
    <%
                    if (repass != null) {
                            out.print ("<p align=\"center\">Veuillez remplir les champs User, Password, Nom et Prenom !</p>");      
                    }
    %>
     
    <center>
    <h2>Fiche de l'abonné</h2>
    <hr>
    <form action="<%=request.getContextPath()+"/ServletAbonne"%>" method="post">
    <table>
    <tr>
    	<td>User*</td>
    		<td><input name="txtUser" value="<%=user%>" type="text" size="20"></td>
    	</tr>
    	<tr>
    	<td>Password*</td>
    		<td><input name="txtPwd" value="<%=pwd%>" type="password" size="20"></td>
    	</tr>
    	<tr>
    		<td>Nom*</td>
    		<td><input name="txtNom" value="<%=nom%>" type="text" size="20"></td>
    	</tr>
    	<tr>
    		<td>Prenom*</td>
    		<td><input name="txtPrenom" value="<%=prenom%>" type="text" size="20"></td>
    	</tr>
    	<tr>
    		<td>Telephone</td>
    		<td><input name="txtTelephone" value="<%=telephone%>" type="text" size="10"></td>
    	</tr>
    	<tr>
    		<td>Mail</td>
    		<td><input name="txtMail" value="<%=mail%>" type="text" size="60"></td>
    	</tr>
    	<tr>
    		<td>Competences</td>
    		<td><input name="txtCompetences" value="<%=competences%>" type="text" size="100"></td>
    	</tr>
    	<tr>
    		<td>
    		<%if (admin.equals("1")) { %>
    			<input type="checkbox" name="ckAdmin" checked="checked">Admin ?
    		<% } else { %>
    			<input type="checkbox" name="ckAdmin">Admin ?
    		<% } %>
    		</td>
    	</tr>
    	<tr>
    		<td>
    		<%if (actif.equals("1")) { %>
    			<input type="checkbox" name="ckActif" checked="checked">Actif ?
    		<% } else { %>
    			<input type="checkbox" name="ckActif">Actif ?
    		<% } %>
    		</td>
    	</tr>
    	<tr>
    		<td>Date de création</td>
    		<td><input name="txtDateCreation" value="<%=datecreation%>" type="text" size="10" ></td>
    	</tr>
    	<tr></tr>
    	<tr>
    		<td>* Champs obligatoires</td>		
    	</tr>
    </table>
    <table>
    	<tr>
    		<td><input type="hidden" value="<%=id %>" name="txtId"></td>
    		<td><input type="hidden" value="0" name="alreadypassed"></td>
    		<td><input type="submit" value="Sauvegarder l'abonné"></td>
    	</tr>
    </table>
    </form>
    </center>
    </body>
    </html>

  2. #2
    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, il est tout à fait normal que tes propriétés aient la valeur null.

    En simplifiant, request c'est de ta page vers le serveur, response, de ton serveur vers ta page.
    Si tu fais un request.getParameter, tu recherches dans la demande "entrante" un paramètre. Le problème dans ton cas, c'est que tu es dans un retour, donc getParameter ne trouve plus les paramètres.
    Il faudrait déjà que dans ta servlet tu fasses request.setAttribute et que dans ta page, request.getAttribute ou session.setAttribute et session.getAttribute (un peu mieux, si tu reviens dans ta page, tu retrouves les données)...
    Mais bon, ce n'est pas la bonne méthode.
    Il serait préférable de passer par un bean pour stocker les informations et de passer le bean à la page (via request ou session)
    Dans ta page, tu définis le bean, et tu accèdes aux propriétés via les getter/setter

    Je te suggère de jeter un oeil du coté de struts qui simplifie ce genre de chose...

    A+

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Points : 210
    Points
    210
    Par défaut
    merci pour ta réponse mais je ne dois pas utiliser les struts. Je trouve bizarre qu'en disabled il me renvoie null alors qu'en enabled il me renvoie la valeur. Dans mon exemple, si à l'arrivée sur la page tous les champs sont remplis et qu'ils sont tous en enabled (je ne parle pas des checkbox) et que je clique sur le bouton toutes les valeurs des champs sont correctement envoyés vers ma Servlet et si le champ Prenom est vide par exemple, toutes les infos sont également envoyées. En revanche si un des champs est disabled alors sa valeur ne sera pas envoyée à la servlet (par le request) tout comme mes checkbox. Mon souci vient pour le moment du request pas du response. Quand je récupère ces champs (disabled) ils sont vides dans mon request.getParameter("champ"); alors que les autres (enabled) sont corrects !!!

    Merci.

  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
    C'est normal, un champ disable n'est pas envoyé.
    Il faudrait utiliser readonly si tu veux protéger contre la saisie/modification et envoyer les données.

    A+

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Points : 210
    Points
    210
    Par défaut
    Merci beaucoup pour le readonly ça fonctionne nickel. Par contre, pour les checkbox, je n'ai toujours pas la solution. La valeur est modifiée dans le request. Si la case est cochée ((String)ckAdmin = 1), au premier clic, la case est décochée (ckAdmin = on ???) et au second clic une Exception est lev&ée (valeur nulle).

  6. #6
    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
    Désolé du retard...

    Les checkbox sont pénibles de ce point de vue : elles ne renvoient de données que si elles sont cochées...
    Donc, dans ton traitement (en supposant que les valeurs possibles soient "0" et "1"), il faut tester un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String valeurCB = request.getParameter("nomCB");
    if ( valeurCB == null ) valeurCB == "0";
    A+

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Points : 210
    Points
    210
    Par défaut
    Merci, c'est ce que j'ai fait au final, je ne m'embête plus avec les value. Je fais fais un truc du genre (admin étant une variable repésentant l'état de ma checkbox, on pour checked et null pour unchecked) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (admin != null) {
    							if (admin.equals("on")) {							
    							//	abonne.setAbonneAdmin(Byte.parseByte(admin));
    								abonne.setAbonneAdmin(Byte.parseByte(String.valueOf(1)));
    							} else {
    								abonne.setAbonneAdmin(Byte.parseByte(String.valueOf(0)));
    							}
    						} else {
    							abonne.setAbonneAdmin(Byte.parseByte(String.valueOf(0)));
    						}

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

Discussions similaires

  1. Redirection de JSP vers servlet
    Par janyoura dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 01/10/2013, 15h13
  2. liaison jsp vers servlet vers jsp
    Par wafabrj dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/06/2012, 16h07
  3. envoi de donnée de jsp vers servlet
    Par alen22 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 05/04/2011, 22h04
  4. Transfère objet JSP vers Servlet
    Par yakuzayang dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 02/02/2011, 15h04
  5. lien jsp vers servlet avec passage de parametre
    Par cool dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 15/05/2008, 22h59

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