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. #21
    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
    Si tu veux renvoyer la valeur "R" quand la case est cochée, tu mets l'attribut value="R".
    Comme une case non cochée n'est pas envoyée (c'est comme ça), il faut systématiquement réinitialiser les propriétés représentées par une checkbox dans la méthode reset(...) du formulaire (ActionForm)

  2. #22
    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
    ok, sinon, j'ai ajoute ds le reset ce bout de 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
     
    	public void reset(ActionMapping mapping, HttpServletRequest request) {
    		if (!ajustContrat.isEmpty()) {
    			for (Iterator<AjustContrat> iterator = ajustContrat.iterator(); iterator
    					.hasNext();) {
    				AjustContrat ajustContrat = (AjustContrat) iterator.next();
    				if (((ajustContrat.getCAjustTypeAjust() != null) && (!ajustContrat
    						.getCAjustTypeAjust().equals("R")))
    						|| (ajustContrat.getCAjustTypeAjust() == null)) {
    					ajustContrat.setCAjustTypeAjust("");
    				}
    			}
    		}
    	}
    Cdlt
    Sallemel

  3. #23
    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
    comme ca, une case qui n'est pas coche par defaut
    si je la coche et je sauvegarde, sa valeur reste egale a "", elle ne prend pas la valeur R

    auriez vous une idee pourquoi?


    Merci
    Cdlt
    Sallemel

  4. #24
    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
    Comme je l'ai dit précédemment, il faut initialiser la propriété CAjustTypeAjust de tous les objets de la liste ajustContrat à "" dans la méthode reset de l'ActionForm.
    Comme la méthode reset est appelée avant le setter, toutes les valeurs sont initialisées à "" et ensuite, il affectera la valeur R pour les checkbox qui ont été cochées.

    Il faut donc enlever la clause if dans la boucle for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	if (!ajustContrat.isEmpty()) {
    	for (Iterator<AjustContrat> iterator = ajustContrat.iterator(); iterator.hasNext();) {
    		AjustContrat ajustContrat = (AjustContrat) iterator.next();
    		ajustContrat.setCAjustTypeAjust("");
    		}
    	}

  5. #25
    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
    ok, merci c_nvy pour votre reponse
    ceci etant, j'ai resette ds tous les ajust_contrat le type a "" au niveau du reset
    mais , j'ai le meme probleme
    si le type vaut R, en editant la ligne, j'ai bien une case cohee
    mais lorsque je decoche la case et je fais le save
    ca garde la valeur R
    de meme si le type vaut "" et j'edite la ligne
    la case apparait bien decochee
    mais si je la cohe et je fais le save
    ca reste =""

    juste a titre d'info, les donnes je les recuperes de la bd et les modifs aussi
    so sauvegardes au niveau de la bd
    Cdlt
    Sallemel

  6. #26
    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
    As-tu le même résultat si tu n'exécutes plus la fonction javascript ?
    Quand tu fais save, tu cliques bien sur un bouton de type submit ?

  7. #27
    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
    Bonjour,
    en fait, lors de la soumission, ca garde l'ancienne valeur

    voici la fonction associee au click
    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=="false"){
    document.forms[0].elements["ajustContrat[" + i + "].CAjustTypeAjust"].value="";
    } else {
    document.forms[0].elements["ajustContrat[" + i + "].CAjustTypeAjust"].value="R";
    }
     
    }
    et voici le code lors de la soumission :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    		document.forms[0].elements["ajustcontModifieId"].value = i+1;
    		document.forms[0].elements["ajustContrat[" + i + "].contratAjustEditmode"].value=0;
    		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="";
    }
    		document.forms[0].action = 'EditAjustContrat.do?do=validateAjustContrat';
     
    		document.forms[0].submit();
    Cdlt
    Sallemel

  8. #28
    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
    Mais pour moi, le code Javascript suivant ne sert à rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    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="";}
    étant donné que tu as initialisé toutes les valeurs de CAjustTypeAjust à "" dans la méthode reset() de l'ActionForm et que tu as ajouté un attribut value="R" dans le tag nested:checkbox.
    Donc, automatiquement, après submit du formulaire déclenché par document.forms[0].submit() , toutes checkbox cochées aura pour valeur R et toutes checkbox non cochées aura pour valeur "".

    Peux-tu donc faire un test en enlevant ce code ?

  9. #29
    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
    d'accord, mais le probleme c'est que si je mets la valeur du checkbox a "R" , j'enleve l'evenement onclick, je supprime le bout de code de test ds la validation et j'ajoute le reset au niveau de l'actionform
    le resultat est que je garde toujours l'ancienne valeur du type
    si la case est cochee , je la decoche et je valide => j'ai en resultat R (ancienne valeur)
    si j'ai la case decohee et je la coche , une fois je valide => j'ai "" ds type

    a titre d'information, le scope pour cette action, est sette a session

    Cdlt
    Sallemel

  10. #30
    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
    Le form-bean est-il bien dans le scope session ?

  11. #31
    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, voici la defintition de l'action

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <action name="saisiAjustContratEditForm" parameter="do"
    			path="/EditAjustContrat" scope="session"
    			type="com.thales.project.action.SaisiAjustContratAction">
    			<forward name="gererSaisiAjustContrats"
    				path="/pages/CPFA_Mensuel/saisi_ajustement/ajust_contrat.jsp" />
    			<forward name="ajouterCommentaire"
    				path="/pages/CPFA_Mensuel/saisi_ajustement/addComment.jsp" />
    		</action>
    par ailleurs, j'ai debuggue l'action lors de la validation, je confirme que pour l'enregistrement a valider , je recupere toujours l'ancienne valeur du type au niveau de l'action
    mais lors de l'edition d'un enregistrement, j'ai bien une case cochee si type vaut "R" et decochee si type vaut ""
    Cdlt
    Sallemel

  12. #32
    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
    et juste pour debugguer,
    j'ai remis l'evenement onclick
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <nested:checkbox property="CAjustTypeAjust" value="R"  onclick='<%="verifierReversible("+Integer.parseInt(numLigne)+" )"%>'    />
    et ds la fonction javascript, j'ai mis juste ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function verifierReversible(i){
     
    alert(document.forms[0].elements["ajustContrat[" + i + "].CAjustTypeAjust"].checked);
     
    }
    si le type vaut "", et j'edite l'enregistrement, que je coche ou decoche la case, j'ai toujours false ds
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.forms[0].elements["ajustContrat[" + i + "].CAjustTypeAjust"].checked
    et ca renvoie , undefined , si la valeur par defaut du type est "R"

    Cdlt
    Sallemel

  13. #33
    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
    Je ne suis pas spécialiste en Javascript mais peut-être que checked ne peut renvoyer true que si CAjustTypeAjust est de type booleen.

    Mais bon, ça devrait fonctionner sans javascript.

    Peux-tu montrer le code de la méthode validateAjustContrat de l'Action et de la méthode reset() de l'ActionForm ?

  14. #34
    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 sallemel Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    document.forms[0].elements["ajustContrat[" + i + "].CAjustTypeAjust"].checked
    C'est quoi ça ?

    L'indice s'applique à CAjustTypeAjust, non ?

  15. #35
    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
    Non, CAjustTypeAjust est une propriété des objets de la liste ajustContrat.

  16. #36
    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
    Sauf que là, on est sur le client en javascript... la seule propriété de formulaire qu'on connait est CAjustTypeAjust
    (D'après ce que je vois là)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <nested:checkbox property="CAjustTypeAjust" value="R"  onclick='<%="verifierReversible("+Integer.parseInt(numLigne)+" )"%>'    />
    Il serait plus esthétique de coder ceci d'ailleurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    onclick="verifierReversible(<%=numLigne%>)"

  17. #37
    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
    Oui mais le nested:checkbox doit être dans un nested:iterate. Enfin, je suppose vu le code html généré.

    Sinon, si tu codes ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="verifierReversible(<%=numLigne%>)"
    la scriptlet n'est pas interprétée.

  18. #38
    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 c_nvy Voir le message
    Sinon, si tu codes ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="verifierReversible(<%=numLigne%>)"
    la scriptlet n'est pas interprétée.
    Oui, effectivement... autant pour moi...
    Par contre tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    onclick="verifierReversible(${idx})"
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <nested:iterate property="list" indexId="idx">

  19. #39
    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
    Je lui ai déjà proposé précédemment dans la discussion mais il faut qu'il déclare son web.xml en J2EE 1.4.

  20. #40
    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
    Bonjour,

    Je ne suis pas spécialiste en Javascript mais peut-être que checked ne peut renvoyer true que si CAjustTypeAjust est de type booleen.

    Mais bon, ça devrait fonctionner sans javascript.

    Peux-tu montrer le code de la méthode validateAjustContrat de l'Action et de la méthode reset() de l'ActionForm ?
    oui biensur, voici le code de validation sachant que j'ai debuggue l'action avec eclipse, et ds ajustContratIt, je ne trouve pas la bonne valeur modifie, je trouve toujours l'ancienne valeur, donc c'est plutot un pb lors du renvoi de la page jsp


    ici la methode validation de l'action
    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
     
    	public ActionForward validateAjustContrat(ActionMapping mapping,
    			ActionForm form, HttpServletRequest request,
    			HttpServletResponse response) throws Exception {
    		SaisiAjustContratEditForm ajustContratEditForm = (SaisiAjustContratEditForm) form;
    		List<AjustContrat> ajustContrat = ajustContratEditForm
    				.getAjustContrat();
    		for (Iterator<AjustContrat> iterator = ajustContrat.iterator(); iterator
    				.hasNext();) {
    			AjustContrat ajustContratIt = (AjustContrat) iterator.next();
    			if (ajustContratIt.getCAjustNLigne() == ajustContratEditForm
    					.getAjustcontModifieId()) {
    				HibernateAjustContratDAO dao = new HibernateAjustContratDAO();
    				dao.updateUjustContrat(ajustContratIt);
    				HibernateUtilisateurDAO daoUser = new HibernateUtilisateurDAO();
    				if (ajustContratIt.getContratAjustEditmode() == 0) {
    					MessageResources mr = getResources(request);
    					String operationLib = mr
    							.getMessage("mensuel.ajustContrat.operationLib");
    					DataMonitoringHome daoDataMonit = new DataMonitoringHome();
    					DataMonitoring dataMonit = new DataMonitoring(1,
    							ajustContratEditForm.getSelectedPeriod(), daoUser
    									.findByIdentifiantDAO("SallemEl"),
    							new Date(), operationLib);
    					daoDataMonit.insertDatamonitoringDAO(dataMonit);
    				}
    				break;
    			}
    		}
    		return mapping.findForward("gererSaisiAjustContrats");
    	}
    et ici la methode reset de l'actionForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void reset(ActionMapping mapping, HttpServletRequest request) {
    		if (!ajustContrat.isEmpty()) {
    			super.reset(mapping, request);
    			for (Iterator<AjustContrat> iterator = ajustContrat.iterator(); iterator.hasNext();) {
    				AjustContrat ajustContrat = (AjustContrat) iterator.next();
    				ajustContrat.setCAjustTypeAjust("");
    				}
    			}
    	}
    Oui mais le nested:checkbox doit être dans un nested:iterate. Enfin, je suppose vu le code html généré.

    Sinon, si tu codes ceci :

    onclick="verifierReversible(<%=numLigne%>)"

    la scriptlet n'est pas interprétée.
    j'ai essaye, mais ce n'est pas interprete
    par contre , sous cette forme, j'ai bien la bonne valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    onclick='<%="verifierReversible("+Integer.parseInt(numLigne)+" )"%>'

    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