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

Struts 1 Java Discussion :

[checkbox] soumission d'une valeur en fonction de l'etat du checkbox


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Points : 49
    Points
    49
    Par défaut [checkbox] soumission d'une valeur en fonction de l'etat du checkbox
    Bonjour,
    j'ai un checkbox auquel j'ai associé un événement onclick
    le problème c'est que j'appelle la fonction javascript.
    Mais dans la page source, le paramètre que je passe à cette fonction n'est pas remplacé par sa valeur (pour info, c'est développé en struts, mais au niveau de traitement des événement ça reste le même que pour une page jsp classique)
    auriez vous une idée pourquoi?

    voici le code javascript du composant, comme vous le constatez <%= Integer.parseInt(numLigne) %>) n'est pas remplacé par sa valeur.
    Pourtant, numLigne, je l'utilise dans l'appel d'autre fonction de la même page, et c'est remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <nested:checkbox property="CAjustTypeAjust" onclick="verifierReversible(<%= Integer.parseInt(numLigne)  %>)"></nested:checkbox>
    j'obtiens ceci dans la page source générée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <td colspan="1" style="width: 223px; height: 23px; text-align: center; background-color: #f0f8ff                       inactivecaptiontext;">
    <input type="checkbox" name="ajustContrat[0].CAjustTypeAjust" value="on" onclick="verifierReversible(<%=Integer.parseInt(numLigne) %>)">
    et voici la fonction javascript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function verifierReversible(i){
    if (document.forms[0].elements["ajustContrat["+i+"].CAjustTypeAjust"].checked==true){
    document.forms[0].elements["ajustContrat["+i+"].CAjustTypeAjust"].value="R";
    } else {
    document.forms[0].elements["ajustContrat["+i+"].CAjustTypeAjust"].value=null;
    }
     
    }

    Cdlt
    Sallemel

  2. #2
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Il faut plutôt coder le onclick comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="<%="verifierReversible("+Integer.parseInt(numLigne)+")"%>"
    d'ailleurs, ce ne serait pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="<%="verifierReversible("+numLigne.intValue()+")"%>"

  3. #3
    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
    Pourquoi un appel jsp là où il n'en faut pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="<%="verifierReversible("+numLigne.intValue()+")"%>"
    Pour l'appel de ta fonction via onclick, ce code est suffisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="verifierReversible(parseInt(numLigne))"
    A moins que j'aie pas bien cerné le pb .
    parseInt est une fonction js qui marche plutot bien.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Points : 49
    Points
    49
    Par défaut
    j'ai eu cette erreur
    Attribute value "verifierReversible("+Integer.parseInt(numLigne)+")" is quoted with " which must be escaped when used within the value
    avec ce codage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    onclick="<%="verifierReversible("+Integer.parseInt(numLigne)+")"%>"
    avec ca aussi, ca ne passe pas, pas de remplacement de numLigne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    onclick="verifierReversible(parseInt(numLigne))"
    sinon, pour info numLigne est un String


    Cdlt
    Sallemel

  5. #5
    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
    numLigne est une variable js ou jsp ?
    Si c js tu fais ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="verifierReversible(parseInt("+numLigne+"))"
    Si c jsp tu fais ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="verifierReversible(parseInt("+<%=numLigne%>+"))"
    Normalement ca devrait marcher, le truc c que tout à l'heure numLigne n'etait pas interpretée comme etant une variable.

  6. #6
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    C'est un problème de quotes.
    Cela fonctionne-t'il mieux comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick='<%="verifierReversible('"+Integer.parseInt(numLigne)+"');"%>'
    quant à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="verifierReversible(parseInt(numLigne))"
    ça ne peut fonctionner parce qu'il ne remplacera pas numLigne par sa valeur.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Points : 49
    Points
    49
    Par défaut
    avec le simple quote , ca ne marche pas aussi

    Attribute value "verifierReversible('"+Integer.parseInt(numLigne)+"');" is quoted with ' which must be escaped when used within the value

  8. #8
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Dans ce cas, il faut ajouter le caractère d'échappement "\" devant les doubles quotes.

  9. #9
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Au fait, si tu as ce message d'erreur, c'est que tu dois être en JSP 2.0.

    Dans ce cas, utilise une EL à la place de la scriptlet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="verifierReversible('${numLigne}');"

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Points : 49
    Points
    49
    Par défaut
    je travaille avec struts 1.2
    meme avec ca, il ne remplace pas le num de ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <td colspan="1" style="width: 223px; height: 23px; text-align: center; background-color: #f0f8ff                       inactivecaptiontext;">
    <input type="checkbox" name="ajustContrat[0].CAjustTypeAjust" value="on" onclick="verifierReversible('${numLigne}');">						<span style="font-size: 8pt"> </span></td>
    Cdlt
    Sallemel

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Points : 49
    Points
    49
    Par défaut
    le probleme en fait, provient de <%= Integer.parseInt(numLigne) %>, il suffit de trouver un moyen pour passer la valeur de numLigne et c'est ok,
    j'ai fait le test de la fonction, sans passage d'argument
    il y a bien l'appel a la fonction, lorsque je coche ou je decoche la case
    cad comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    onclick="javascript:verifierReversible()"

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Points : 49
    Points
    49
    Par défaut
    c'est bon, c'est ok maintenant
    voici comment je passe le param

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    onclick='<%="verifierReversible("+Integer.parseInt(numLigne)+" )"%>' >
    Cdlt
    Sallemel

  13. #13
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Avec une EL, ce serait quand même bien plus simple.

    Peux-tu préciser quel serveur d'application tu utilises et sa version ?
    Peux-tu aussi montrer le début de ton web.xml ?

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Points : 49
    Points
    49
    Par défaut
    oui bien sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="ISO-8859-1"?>
    et je travaille avec tomcat 5.5


    Cdlt
    Sallemel

  15. #15
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Il me fallait la balise DOCTYPE et webapp.
    Enfin, vu que l'EL ${numLigne} n'est pas interprétée, tu dois avoir défini ton web.xml en J2EE 1.3.

    Comme tu es en Tomcat 5.5, tu pourrais modifier ton web.xml pour passer en J2EE 1.4 (Servlet 2.4/JSP 2.0), en remplaçant les balises DOCTYPE et webapp par celle-ci :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    	version="2.4">
    et là, tu pourras utiliser les EL à la place des scriptlets dans tes jsp.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Points : 49
    Points
    49
    Par défaut
    en fait, c'est pas vraiement resolu :-(
    pour le passage de parametre a la fonction javascript , ca c'est ok
    par ailleurs, j'ai une grille que j'affiche row par row et que je recupere de la bd
    et pour chaque row, il y a attribut CAjustTypeAjust
    en terme de valeur, ca peut prendre deux valeurs
    "" ou "R"
    et ca peut etre affiche en deux mode :
    mode visualisation, ds ce cas je fais juste un bean:write
    par contre pour le mode edition, je l'affiche en case a cocher
    si c'est coche, je veux que CAjustTypeAjust prenne la valeur R
    si c'est decoche , je veux que ca prenne la valeur ""
    de meme lors du chargement
    auriez vous une idee comment la faire apparaitr en case cochee si CAjustTypeAjust=R, sinon ,cad ="", en case qui n'est pas cohee (je parle lors du load)



    Cdlt
    Sallemel

  17. #17
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Il faut ajouter value="R" dans le tag nested:checkbox.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Points : 49
    Points
    49
    Par défaut
    j'ai change l'evenement, au lieu de le faire onclick,
    je l'ai ajoute lors de la validation de la modif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		if (document.forms[0].elements["ajustContrat[" + i + "].CAjustTypeAjust"].checked==true){
    document.forms[0].elements["ajustContrat[" + i + "].CAjustTypeAjust"].value="R";
    } else {
    document.forms[0].elements["ajustContrat[" + i + "].CAjustTypeAjust"].value="";
    }
    le probleme , si je mets value="R"
    ca prend toujours R, que je coche ou pas la case
    ca genere ceci comme code ds les deux cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="checkbox" name="ajustContrat[0].CAjustTypeAjust" value="R" checked="checked">
    et pour les cases non ds la valeur !=R
    que je coche ou pas lors de l'edition, ca reste comme tel , ca prend toujours ""
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="checkbox" name="ajustContrat[1].CAjustTypeAjust" value="R">

    Cdlt
    Sallemel

  19. #19
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Quand tu dis "lors de la validation de la modif", veux-tu dire lors de la soumission du formulaire ?

    Le problème qui se pose c'est que, lorsque tu vas décocher une checkbox, sa valeur n'étant pas renvoyée au submit du formulaire, elle gardera la valeur R.
    Il faudrait donc initialiser la propriété CAjustTypeAjust de tous les objets de la liste ajustContrat à "" dans la méthode reset de l'ActionForm.
    Ainsi, au submit du formulaire, toutes les checkbox non cochées auront pour valeur "" et celles cochées auront pour valeur "R".

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Points : 49
    Points
    49
    Par défaut
    oui tout a fait c'est lors de la soumission du formulaire
    sinon, je ne comprends pas pourquoi lorsque une case est cochee ou pas , sa valeur (cad checked=true ou false) n'est pas renvoye lors du submit
    c'est uniquement pour le checkbox ca , ou il y a d'autres composants
    sinon pour resumer :
    lors du submit du formulaire , j'ai ajoute ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (document.forms[0].elements["ajustContrat[" + i + "].CAjustTypeAjust"].checked==true){
    document.forms[0].elements["ajustContrat[" + i + "].CAjustTypeAjust"].value="R";
    } else {
    document.forms[0].elements["ajustContrat[" + i + "].CAjustTypeAjust"].value="";
    }
    ds le mode visualisation, j'affiche la propriete CAjustTypeAjust comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <nested:write property="CAjustTypeAjust" />
    en mode edition, je l'affiche comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <nested:checkbox property="CAjustTypeAjust" value="R" />
    CAjustTypeAjust est un String
    et ceci est affiche ds un <nested:iterate>



    Cdlt
    Sallemel

Discussions similaires

  1. Probleme vba pour renvoyer une valeur en fonction de deux criteres
    Par tarif dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/04/2008, 20h28
  2. Réponses: 3
    Dernier message: 22/03/2008, 12h48
  3. Réponses: 5
    Dernier message: 09/12/2007, 19h17
  4. Réponses: 15
    Dernier message: 02/05/2007, 19h04
  5. Réponses: 4
    Dernier message: 01/06/2006, 15h58

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