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 :

getParameterValues() et insertion dans DB


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier Avatar de fripette
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 241
    Points : 71
    Points
    71
    Par défaut getParameterValues() et insertion dans DB
    Bonjour !
    Je suis face à un problème de récupération de checkbox.
    Je vous présente mon code et après je vous explique ma démarche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <td>A: <input type="checkbox" name="indice36<%=i%>" value='<%=listIndice[0]%>' />
    			B: <input type="checkbox" name="indice36<%=i%>" value='<%=listIndice[1]%>' />
    			C: <input type="checkbox" name="indice36<%=i%>" value='<%=listIndice[2]%>' />
    			D: <input type="checkbox" name="indice36<%=i%>" value='<%=listIndice[3]%>' />
    </td>
    i dépendra de la taille de mon resultset : il y aura des checkbox pour chaque item de mon resulset.

    Voici ce qu'il se passe dans 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
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    							// on stocke les indices qui ont été retenu pour ce prélèvement
     
     
    							String[] listSupFlore22 = request.getParameterValues("indice22"+k);
    							String[] listSupFlore36 = request.getParameterValues("indice36"+k);
     
    							String supFlore22 = listSupFlore22[0];
    							String supFlore36 = listSupFlore36[0];
     
    							for (int m=1;m<listSupFlore22.length;m++){
    								supFlore22.concat(listSupFlore22[m]);								
    							}
     
    							for (int m=1;m<listSupFlore36.length;m++){
    								supFlore36.concat(listSupFlore36[m]);								
    							}
     
    							if (testerEtude(Prelev)){
    								updatePrlvmt.execute("update ResultEBM " +
    										"set valeurFlore36='"+valeurF36+"' " +
    										",supFlore36='"+supFlore36+"' " + 
    										",valeurFlore22='"+valeurF22+"' " +
    										",supFlore22='"+supFlore22+"' " +
    										",valeurPaeru='"+valeurPseudomonas+"' " +
    										",checkPyo='"+checkPyo+"' " +										
    										" where idPrelevement='"+Prelev+"'") ;
    							}
    							else{
    Là je n'ai pas de messages d'erreur.
    Cependant bien que j'ai coché 3 cases, le résultat dans la DB de supFlore36 ou 22 est uniquement constitué de la premiere lettre (donc de listSupFlore22(ou 36)[0]).

    Mais lorsque je fais ca (l'approche logique):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    String[] listSupFlore22 = request.getParameterValues("indice22"+k);
    String[] listSupFlore36 = request.getParameterValues("indice36"+k);
    String supFlore22 = null;
    String supFlore36 = null;
     
    for (int m=0;m<listSupFlore22.length;m++){
    supFlore22.concat(listSupFlore22[m]);
    }
     
    for (int m=0;m<listSupFlore36.length;m++){
    supFlore36.concat(listSupFlore36[m]);	
    }
    J'ai le message d'erreur suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Connected to :	jdbc:mysql://127.0.0.1:3306/BIOTECH
     
    *** SQLException caught in main()
    java.lang.NullPointerException
    Le problème d'apres l'erreur vient de la ligne de concaténation! Or l'élèment listSupFlore22[0] existe bien (cf le premier code).
    Auriez vous une idée s'il vous plait ? J'ai bloqué 1h hier là dessus et je ne vois pas d'où vient l'erreur.

  2. #2
    Membre régulier Avatar de fripette
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 241
    Points : 71
    Points
    71
    Par défaut
    Help !
    J'ai essayé d'améliorer mais j'ai toujours le même 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
    	// on stocke les indices qui ont été retenu pour ce prélèvement							
    							String[] listSupFlore22 = request.getParameterValues("indice22"+k);
    							String[] listSupFlore36 = request.getParameterValues("indice36"+k);
    							
    							String supFlore22 = null;
    							String supFlore36 = null;
    							
    							
    							 if (listSupFlore22.length == 1) {		
    									supFlore22 = listSupFlore22[0];
    							 	}else {
    							 		for (int m=0;m<listSupFlore22.length;m++){
    							 			supFlore22.concat(listSupFlore22[m]);
    										}
    							 }
    									
    							 if (listSupFlore36.length == 1) {		
    								 supFlore36 = listSupFlore36[0];
    							 	}else {
    							 		for (int m=0;m<listSupFlore36.length;m++){
    							 			supFlore36.concat(listSupFlore36[m]);
    										}
    							 }
    Je ne comprend pas§ Je pense que ma facon de récupérer est bonne pourtant (dans la 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
     
    <td>
    			A: <input type="checkbox" name="indice22<%=i%>" value="<%=listIndice[0]%>">
    			B: <input type="checkbox" name="indice22<%=i%>" value="<%=listIndice[1]%>">
    			C: <input type="checkbox" name="indice22<%=i%>" value="<%=listIndice[2]%>">
    			D: <input type="checkbox" name="indice22<%=i%>" value="<%=listIndice[3]%>">
    			</td>  
     
         	</tr> 
     
         	<tr>  
        		<td>Flore a&eacute;robie revivifiable &agrave; 36&deg;C</td> 
        		<td>
                	<SELECT name="respFlore36<%=i%>" onchange="checkNomSite(<%=i%>)">
                    <OPTION value="<1"  selected><1</OPTION>
                    <OPTION value="Autre">Autre</OPTION>
                    </SELECT></td>
     
    			<td><input type="text" name="inputFlore36<%=i%>" value="" size="25" disabled/></td>
     
    			<td>
    			A: <input type="checkbox" name="indice36<%=i%>" value="<%=listIndice[0]%>">
    			B: <input type="checkbox" name="indice36<%=i%>" value="<%=listIndice[1]%>">
    			C: <input type="checkbox" name="indice36<%=i%>" value="<%=listIndice[2]%>">
    			D: <input type="checkbox" name="indice36<%=i%>" value="<%=listIndice[3]%>">
    			</td>
    La longueur du getParameterValues est bien checkée donc je ne comprend d'où peut venir ce nullpointerexception !
    Please de l'aide je deviens chèvre : mon approche est la bonne !
    J'ai vu sur le site de sun :

    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
     
    I figured it out. The initial problem was that I had 10 checkboxes with the same name "time" and when I put
     
    String[] selectedTimes=request.getParameterValues("time");
     
    and then tried to access its elements by:
     
    selectedTimes[0]
     
    it returned null. It sounds pretty odd (to me at least)
    but I fixed the problem by writing the following statement:
     
    String selectedTimes[]=request.getParameterValues("time");
     
    So, the only thing I changed is those brackets that I put after selectedTimes instead after String. 
    I don't know why and how but it works right now. Anyways, thanks to all of you who tried to help me, Jimmy.
    J'ai essayé mais niet !

  3. #3
    Membre confirmé Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Points : 452
    Points
    452
    Par défaut
    En regardant bien ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String supFlore22 = null;
    String supFlore36 = null;
    
    for (int m=0;m<listSupFlore22.length;m++){
      supFlore22.concat(listSupFlore22[m]);
    }
    on voit que supFlore22 est null quand tu essaie de faire appel à la méthode concat, d'où le NullPointerException...

    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String supFlore22 = "";
    String supFlore36 = "";
    Pensez au tag
    Mon blog Tutoriels et Astuces en Java : http://emmanuelpierre.free.fr/blog/index.php?

  4. #4
    Membre régulier Avatar de fripette
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 241
    Points : 71
    Points
    71
    Par défaut
    Le soucis venait effectivement de là.
    Mais un autre problème se présente :
    lorsque je coche plusieurs cases, celles ci ne sont pas récupérées dans le request.getParameterValues() et la valeur qui est entré dans ma base est vide.

    Pourtant je n'ai pas de message d'erreur dans mon catalina.out.
    Pour rappel mon code :
    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
     
    	// on stocke les indices qui ont été retenu pour ce prélèvement							
    							String[] listSupFlore22 = request.getParameterValues("indice22"+k);
    							String[] listSupFlore36 = request.getParameterValues("indice36"+k);
     
    							String supFlore22 = "";
    							String supFlore36 = "";
     
     
    							 if (listSupFlore22.length == 1) {		
    									supFlore22 = listSupFlore22[0];
    							 	}else {
    							 		for (int m=0;m<listSupFlore22.length;m++){
    							 			supFlore22.concat(listSupFlore22[m]);
    										}
    							 	}
     
    							 if (listSupFlore36.length == 1) {		
    								 supFlore36 = listSupFlore36[0];
    							 	}else {
    							 		for (int m=0;m<listSupFlore36.length;m++){
    							 			supFlore36.concat(listSupFlore36[m]);
    										}
    							 	}
     
    							if (testerEtude(Prelev)){
    								updatePrlvmt.execute("update ResultEBM " +
    										" set valeurFlore36='"+valeurF36+"' " +
    										 ",supFlore36='"+supFlore36+"' " + 
    										" ,valeurFlore22='"+valeurF22+"' " +
    										" ,supFlore22='"+supFlore22+"' " +
    										" ,valeurPaeru='"+valeurPseudomonas+"' " +
    										" ,checkPyo='"+checkPyo+"' " +										
    										" where idPrelevement='"+Prelev+"'") ;
    							}
    							else{
    								updatePrlvmt.execute("insert into ResultEBM values ('"+Prelev+"','"+valeurF22+"','"+supFlore22+"','"+valeurF36+"','"+supFlore36+"','"+valeurPseudomonas+"','"+checkPyo+"')") ;
     
    							}
    							k++;
    						}
    Auriez vous une dernière idée s'il vous plait ?
    Merci d'avance pour votre précieuse aide.

  5. #5
    Membre confirmé Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Points : 452
    Points
    452
    Par défaut
    Si je devais récupérer les valeurs d'une checkbox, je ferais ainsi :

    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
    
    boolean aSelected = false; 
    boolean bSelected = false; 
    boolean cSelected = false; 
    boolean dSelected = false;
            
    String[] checkValues = request.getParameterValues("indice22"+k);
            
    if (checkValues == null || checkValues.length == 0) // aucune n'est cochée
    
    else { //au moins une est cochée
                List<String> checkValuesList = Arrays.asList(checkValues);
                aSelected = checkValuesList.contains("valeurA");
                bSelected = checkValuesList.contains("valeurB");
                ...
            }
    
    if (aSelected) {
    //code specifique a executer si la case A est cochee
    }
    En fait quand tu submit le formulaire, seules les valeurs (value) des cases cochées vont être envoyées.

    Dans un premier temps, tu peux afficher le code source html correspondant à ton formulaire. comme ça tu verras si tes index marche vraiment.

    Puis dans ton action tu mets des logs (ou system.println.out moins conseillés) pour vérifier ce que tu récupère.
    Pensez au tag
    Mon blog Tutoriels et Astuces en Java : http://emmanuelpierre.free.fr/blog/index.php?

  6. #6
    Membre régulier Avatar de fripette
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 241
    Points : 71
    Points
    71
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dans un premier temps, tu peux afficher le code source html correspondant à ton formulaire. comme ça tu verras si tes index marche vraiment.
    J'ai bien vérifié que je reprenais le bon nom de la variable (dû à la variabilité de mon i qui s'incrémente.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    En fait quand tu submit le formulaire, seules les valeurs (value) des cases cochées vont être envoyées.
    Ca je suis tout à fait d'accord avec toi : le soucis est que lorsque je coche plusieurs cases (3-4) ces valeurs ne sont pas du tout concaténées entre elles .

    Je veux bien essayer ton code mais j'ai des doutes parce que pour récupérer tes valeurs cochées tu fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String[] checkValues = request.getParameterValues("indice22"+k);
    or je pense que mon soucis vient de cette étape .

    En fait les lettres a, b ,c et d correspondantes à des légendes donc l'user peut cocher plusieurs.
    Pour stocker les légendes associées à un prélèvement : je fais une concaténation des cases cochées (par exemple si cases a,b et cochées alors supFlore = abc ) puis je ferai un split pour lire lettre par lettre

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Il y a surtout que tu utilises les checkbox un peu comme un bouton radio.
    Dans ton groupe de choix, toutes les checkbox ont le même nom ce qui va poser problème puisque seules les checkbox cochées sont envoyées au serveur...
    Il faudrait trouver une autre méthode d'attribution des noms (par exemple un préfixe de groupe et une boucle de recherche sur request.getParameterNames()...)

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre régulier Avatar de fripette
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 241
    Points : 71
    Points
    71
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Il y a surtout que tu utilises les checkbox 
    un peu comme un bouton radio.
    Alors là vraiment pas : un radio bouton c'est UN choix parmi plusieurs.
    Mon client pourra choisir plusieurs légendes pour un même prélèvement .
    Dis moi si je me trompe et que j'ai rien compris mais c'est pour ca que j'ai choisi l'option checkbox .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dans ton groupe de choix, toutes les checkbox ont le même nom ce qui va poser problème 
    puisque seules les checkbox cochées sont envoyées au serveur...
    Tous les checkbox n'ont pas le même nom d'un prélèvement à l'autre car j'incrémente mon k au fur et à mesure donc pour un prèlèvement il y aura un checkbox spécifique (indice22 + int ).

    Après qu'il ait le même nom pour la lettre a, b, c et d : c'est normal non ? c'est comme ca que je peux récupérer toutes les valeurs cochées .

    Après est ce que tu veux dire que si aucune case n'est coché pour un prèlèvement donc aucune valeur ne sera renvoyé à l'int spécifique ?
    la valeur de String [] listSupFlore36 sera de 0 ou null .
    Je reconnais qu'effectivement j'ai oublié de traiter ce cas.

  9. #9
    Membre confirmé Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Points : 452
    Points
    452
    Par défaut
    La méthode de récupération des valeurs des checkbox est la bonne !
    MAIS la méthode de concaténation d'est pas la bonne...

    La méthode concat renvoie une nouvelle chaîne de caractères. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            String resultat="";
            String test = "hello";
            resultat = test.concat(" world");
    Au final tu auras
    test = "hello" (non modifié)
    resultat = "hello world" (nouvelle chaîne).

    Donc fait plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    StringBuilder supFlore22 = new StringBuilder();
     
    for (int m=0 ; m<checkValues.length ; m++){
      supFlore22.append(checkValues[m]);
    }
     
    String liste = supFlore22.toString();
    Pensez au tag
    Mon blog Tutoriels et Astuces en Java : http://emmanuelpierre.free.fr/blog/index.php?

  10. #10
    Membre régulier Avatar de fripette
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 241
    Points : 71
    Points
    71
    Par défaut
    Magnifique ca marche ! Ca venait effectivement du Concat .
    Merci beaucoup à tous pour votre participations et aides !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/06/2004, 13h47
  2. Insertion dans fichier texte + rapide que TStringList ?
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 26/02/2004, 12h34
  3. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 23h34
  4. Insertion dans un fichier xml à partir d'un xsl
    Par alexandre54 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/03/2003, 10h45
  5. Insertion dans un fichier XML
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/02/2003, 18h16

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