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 2 Java Discussion :

struts 2 et checkbox


Sujet :

Struts 2 Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut struts 2 et checkbox
    Bonjour,

    Etant actuellement en train de reprendre une appli avec du struts 2, je suis confronté à un problème lié à une demande d'ajout de checkbox (pas multiple) dans un formulaire.
    La classe côté serveur hérite d'ActionSupport et je lui ai rajouté un champ booléen (avec getter et setter) comme l'indique la documentation. D'après cette dernière, la classe action ne récupère la valeur de la checkbox (il met le champ à true) que si on la coche (sinon le formulaire n'envoie pas le paramètre et le champ est implicitement false).
    Là où le bat blesse c'est que lorsque je ne coche pas ce checkbox, le champ est tout de même à true et si on fait un request.getParameter("leNomDuChamp") celui-ci n'est pas nul et a bien la valeur true !!!
    Je suis limite au bord de la crise car j'ai beau faire des recherches dans tous les sens, je ne parviens pas à comprendre ce qui se passe.
    Si quelqu'un a ne serait-ce qu'une idée quant à ce comportement des plus farfelus (ou mieux un début de solution) je lui serais infiniment reconnaissant.

  2. #2
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Juin 2008
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2008
    Messages : 86
    Points : 69
    Points
    69
    Par défaut
    Il faudrait peut être voir un peu ton code.
    ce code fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <s:checkbox name="test" value="tester" />
    et en classe java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private boolean test;
     public String execute() throws Exception {
    System.out.println("test="+test);
    return SUCCESS;
    }
     public boolean isTest() {
            return test;
        }
        public void setTest(boolean test) {
            this.test = test;
        }
    test est bien à true si il est coché sinon false.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Tout d'abord, merci de ta réponse Manau.
    Mon code est similaire à celui que tu proposes (en fait c'est du code existant sur lequel je dois "greffer" cette checkbox) et j'ai bien intégré la façon dont on doit implémenter tout ça.
    Le problème est que, même décochée, la checkbox transmet son paramètre (qui devrait être nul en toute logique) et du coup c'est un peu comme si, quoi qu'on fasse, l'ActionSupport recevait systématiquement le paramètre et mettait le champ à true.
    Le code complet est une vraie usine à gaz (ça te transmet des paramètres dans tous les sens, avec redirection à tout va et pas documenté avec ça) donc je ne pense pas qu'il s'agisse d'un bug lié à Struts mais d'un tour de passe-passe qui m'échappe encore et qui corrompt le comportement de l'action.
    J'ai trouvé une manière (peu élégante) de contourner mon problème en créant un champ hidden qui est mis à jour par la checkbox et qui est responsable de la valeur à persister. En gros, la checkbox est plus côté client et le champ hidden du côté serveur ... je sais, c'est pas beau mais quand nécessité (entendre ici développement à l'arrache) fait loi ...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    1) As-tu pensé à faire un clean, puis un build?
    2) Utilise s:checkboxlist.
    Si tu veux absolument du s:checkbox, remplace le paramètre value par fieldValue.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Points : 151
    Points
    151
    Par défaut
    Oui je me rappelle avoir eu le même souci il y a quelque temps.

    Alors j'ai utilisé le bon vieux checkbox puis un champ caché struts2 pour récupérer la bonne information.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="checkbox"  id="idCheck" name="idCheck"  onclick="maj()" />
    				<s:hidden id="champCheckBox" key="champCheckBox" ></s:hidden>
    Dans le code de la fonction maj() recupérer les id et mettre dans l'un la valeur de l'autre .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     function maj(){
     	var  idBtnParcourir  = document.getElementById("idBtnParcourir");
    	 var  idCheck= document.getElementById("idCheck");
    	 var champCheckBox = document.getElementById("champCheckBox");
      champCheckBox.value = idCheck.checked ;
     
     }//maj
    Et le tour est joué.

  6. #6
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Y-a-t'il une autre solution que l'utilisation d'un hidden?

  7. #7
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 48
    Points
    48
    Par défaut
    En fait, encore + simple, sans champ hidden:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <s:checkbox  key="monBean.monBooleen"></s:checkbox>
    Surtout ne pas mettre de name à la checkbox.
    Uniquement key.

    Et sur le bean un getter setter sur le boolean. La valeur est bien mise à jour de cette manière.

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/08/2008, 10h07
  2. [Struts] probleme html:checkbox ou multibox
    Par bruno270579 dans le forum Struts 1
    Réponses: 20
    Dernier message: 03/03/2006, 15h35
  3. [Struts]Problème de checkbox
    Par soony dans le forum Struts 1
    Réponses: 5
    Dernier message: 22/08/2005, 17h17
  4. [struts][debutant]input checkbox vs html checkbox
    Par venegan dans le forum Struts 1
    Réponses: 2
    Dernier message: 19/08/2005, 16h23
  5. [STRUTS]Pb de checkbox
    Par larude dans le forum Struts 1
    Réponses: 8
    Dernier message: 08/04/2004, 16h07

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