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 :

Problème de session dans <html:checkbox [FAQ]


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Points : 39
    Points
    39
    Par défaut Problème de session dans <html:checkbox
    Salut,

    j'ai un problème de session dans l'utilisation du <html:checkbox.

    j'ai un formulaire avec une liste de checkbox, je coche par exemple deux checkbox puis je valide, une jsp s'affiche avec un résulat. si je reviens sur mon form je trouve les box sont bien cochées ce qui est nomale puisque je garde mon form dans la session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <action name="rapportParametresForm" path="/formulaireRapportParametres" scope="session" type="frontend.forms.RapportParametresAction" validate="false" parameter="dispatch">
    <forward name="form" path="/views/body/rapport.parametres.formulaire.jsp"/>
    <forward name="resultat" path="/views/body/rapport.resultat.jsp"/>
    <forward name="erreur" path="/erreurs.do" />
    Maintenant si je décoche une des deux box déjà cochée, puis je valide je reçois tjs le même résultat et une fois je retourne vers mon form je trouve les deux box cochées !!
    en gros, mon pb c que j'arrive pas à décocher une box une fois déjà cochée!

  2. #2
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    L'utilisation des checkboxs est trop spécial. Perso je n'aime pas ce mode de fonctionnement.

    Si tu coches ca envoi comme valeur comme quoi elle est coché donc après tu sais qu'elle est coché. Ensuite si tu la decoche ca n'envois rien et donc tu ne peux pas voir qu'elle a été décoché.

    Pour etre simple, coché => valeur envoyé
    pas coché => rien ne se passe

    Après faut faire avec et faire une magouille si tu veux faire autre chose...
    Si tu n'as pas super bien compris mon explication regarde la faq struts parti checkbox!
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Points : 39
    Points
    39
    Par défaut
    Salut,
    merci pour ta réponse, je crois que je comprends comment ça marche les checkbox.
    mon pb c que j'arrive pas à comprendre pourquoi quand je décoche mon checkbox, struts ne change pas sa valeur dans la session, il garde tjs sa valeur initiale!!! c un peu bizzare non ?!

  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
    Il n'y a aucun problème avec les checkboxes (même si c'est lourd).

    Pour ton problème, il suffit de réinitialiser la liste des valeurs récupérées dans la fonction reset de ton ActionForm.
    Le problème suivant, c'est si ta page n'est pas chargée à chaque appel et que tes checkboxes sont "disabled"...
    Idéalement, si tu connais le mode d'affichage (consultation / modification), tu ne fais le reset que pour une modification...
    Tu me suis ?

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

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Points : 39
    Points
    39
    Par défaut
    je suis désolé, je ne vois pas trop ce que tu veux dire par consultation/modification

  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
    La question de réinitialiser ne se pose que quand tes données sont modifiables, donc, par exemple, quand tu sauvegardes ou ajoutes
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Points : 39
    Points
    39
    Par défaut
    si j'ai bien compris tu parles de modif ou sauvegarde de données dans la base !?

    je crois que j'ai mal exposé mon pb, dans mon cas il ne s'agit pas d'initialiser mon form à partir des données d'une base par exemple, mais de garder mon form avec ses valeurs dans la session pour faciliter la saisie une fois le form est appelé pour une 2ème fois.

  8. #8
    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
    Non, ce n'est pas ce que je voulais dire...
    Si ta page a toujours ces champs en I/O, il n'y a pas de problème, tu fais systématiquement une réinitialisation dans la méthode reset
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Points : 39
    Points
    39
    Par défaut
    justement il ne sont pas tjs en O/I, ils seront en fonction de ce que l'utilisateur a saisi dans son formulaire.
    je me reéxplique :

    1 - un utilisateur affiche le formulaire, les checkbox ne sont pas cochées.
    2 - il coche 2 box puis il soumet le form, une jsp résultat est affichée.
    3- l'utilisateur demande le même formulaire pour effectuer une autre requête avec des champs différents.
    4- le form est affiché avec les deux box checké (normal car scope="session").
    5- l'utilisateur décoche une box puis soumet une 2ème fois => et c là le problème !! le form en session ne prend pas en compte le changement effectué au niveau du form et affiche le même résultat !!
    6- si on renvient une autre fois sur le form on trouvera que les 2 box sont tjs cochées !! ce qui n'est normale !

    ce problème ne se produit que pour les checkbox et pas pour les autres comme les listes, les liste multiples...

  10. #10
    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
    Oui, c'est clair...
    Le problème (comme te le disait maxf1), c'est que les checkboxes ne sont renvoyées que si elles sont cochées... d'où la méthode reset de ActionForm...
    Là, tu réinitialises la liste des valeurs "checkées".
    Tu n'as pas le choix, ou alors, il faut utiliser autre chose que checkbox...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Points : 39
    Points
    39
    Par défaut
    normalement c pas au niveau de la méthode reset qu'on doit faire ce traitement, car on peut pas savoir qu'elles sont les box qui étaient checkés lors de la dernière requête.

    pour ce pb j'ai proposé une solution qui marche très bien mais je pense qu'il y a une manière plus propre de faire.

    Ma solution :
    au niveau de la méthode validate :

    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
     
    public ActionErrors validate(ActionMapping arg0, HttpServletRequest request) {
    // je récupère les valeurs des box 
    String dateDetection = request.getParameter("dateDetection");
    String dateContractuelle = request.getParameter("dateContractuelle");
    String dateCorrection = request.getParameter("dateCorrection");
     
    // si la case n'est pas cochée je lui attribut une valeur "off"
    if(dateDetection == null)
    	this.set("dateDetection", "off");
    if(dateContractuelle == null)
    	this.set("dateContractuelle", "off");
    if(dateCorrection == null)
    	this.set("dateCorrection", "off");
     
    ....
    au niveau de la méthode save de mon DispatchActionForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public ActionForward save(ActionMapping mapping, ActionForm  form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
    if(((String)formulaire.get("dateDetection")).equalsIgnoreCase("on"))
    	refDate.add("DateDetection");
    if(((String)formulaire.get("dateCorrection")).equalsIgnoreCase("on"))
    	refDate.add("DateCorrection");
    if(((String)formulaire.get("dateContractuelle")).equalsIgnoreCase("on"))
    	refDate.add("DateContractuelle");

    en donnant une valeur "off" à mes cases décochées j'évite de les prendre en compte au niveau de ma méthode save(). voilà !

  12. #12
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Citation Envoyé par don'de
    normalement c pas au niveau de la méthode reset qu'on doit faire ce traitement, car on peut pas savoir qu'elles sont les box qui étaient checkés lors de la dernière requête.
    Bof, on s'en moque un peu.
    Le reset est appelé avant le populate, entre le moment où l'utilisateur soumet le formulaire et le moment où Struts remplit son ActionForm.
    Comme aucune valeur n'est m'apparaît dans la request pour une checkbox non cochée, en mettant à l'état "déselectionné" dans la méthode reset on s'assure de la cohérence :
    - décoché => on passe pas dans le setter, ca change rien puisqu'on a mis par défaut à l'état décoché
    - coché => on passe dans le setter et on affecte une valeur, on a bien mémorisé qu'on avait coché.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par Ricky81
    Bof, on s'en moque un peu.
    Le reset est appelé avant le populate, entre le moment où l'utilisateur soumet le formulaire et le moment où Struts remplit son ActionForm.
    pourtant la méthode reset est utilisée pour initialiser le formulaire avant qu'on le soumet !! dans ce cas là je dirai que le reset est appelé plutôt avant la validation du formulaire et pas après. ou bien j'ai mal compris peut être!!

  14. #14
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Citation Envoyé par don'de
    pourtant la méthode reset est utilisée pour initialiser le formulaire avant qu'on le soumet !! dans ce cas là je dirai que le reset est appelé plutôt avant la validation du formulaire et pas après. ou bien j'ai mal compris peut être!!
    L'utilisateur remplit son formulaire.
    Il clique sur un bouton de type submit ou équivalent
    Le contrôleur Struts regarde le path de l'action, trouve le mapping, et se charge de récupérer l'actionForm correspondant (soit dans un pool dans le cas du scope request, soit directement dans la session si scope session).
    Il appelle la méthode reset.
    Il utilise les mécanismes de BeanUtils pour remplir l'objet ActionForm à partir des données présente dans la requête HTTP.
    Si le mapping précise l'option validate="true", le contrôleur appelle la méthode validate sur le form.
    Si la validation est ok, on rentre dans la méthode execute de l'Action.

    Voila voila.
    Donc on dit grosso modo la même chose.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par Ricky81
    L'utilisateur remplit son formulaire.
    Il clique sur un bouton de type submit ou équivalent
    Le contrôleur Struts regarde le path de l'action, trouve le mapping, et se charge de récupérer l'actionForm correspondant (soit dans un pool dans le cas du scope request, soit directement dans la session si scope session).
    Il appelle la méthode reset.
    ok, je vais donner un exemple de ce que j'essai de dire.
    lorsque je fais un set d'un attribut de mon Form dans la méthode reset(), mon attribut est initialisé par la valeur (dans mon exemple "enter login") avant d'appeler le ActionForm => d'où l'affichage de cette valeur dans mon formulaire avant de faire le submit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class RapportParametresForm extends DynaActionForm {
     
    	private static final long serialVersionUID = 1L;
     
    	public void reset(ActionMapping mapping, HttpServletRequest request) {
    	this.set("login", "enter login");
    }

  16. #16
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Je te renvoie vers la Javadoc

Discussions similaires

  1. [2.x] problème variable session dans twig
    Par Viduc dans le forum Symfony
    Réponses: 13
    Dernier message: 02/10/2014, 08h17
  2. Problème de quotes dans du HTML encapsulé
    Par sub_zero dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 02/12/2012, 13h45
  3. [Search] Problème de Session dans Hibernate Search
    Par titawine dans le forum Hibernate
    Réponses: 1
    Dernier message: 22/04/2012, 03h02
  4. Réponses: 10
    Dernier message: 10/11/2011, 00h46
  5. Problème de marges dans <table> HTML
    Par Peexstudio dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 16/04/2010, 14h20

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