Bonjour tout le monde!
Je m'arrache les cheveux sur un problème de checkbox que je n'arrive pas à comprendre.
J'ai une page avec 2 checkbox:
Dans l'ActionForm associé à mon formulaire, j'ai les champs et les getter/setter suivants:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <html:checkbox property="add_product1" />Add Product 1 [ ] <html:checkbox property="add_product2" />Add Product 2
Dans le reset() de l'ActionForm, j'initialise mes 2 booléens à false:
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 private boolean add_product1; public boolean isAdd_product1() { return this. add_product1; } public void setAdd_product1(boolean add_product1) { this. add_product1 = add_product1; } private boolean add_product2; public boolean isAdd_product2() { return this. add_product2; } public void setAdd_product2(boolean add_product2) { this. add_product2 = add_product2; }
Dans mon formulaire, lorsque l'utilisateur change l'item sélectionné dans un popup menu, une action est lancée par l'intermédiaire de la fonction retrieveURL de la biblio ajax.js, qui permet de ne recharger qu'une partie de la page (tout ce qui se trouve entre de <span id="mon_id"></span>, ce qui est le cas de mes checkbox).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public void reset() { [ ] add_product1 = false; add_product2 = false; }
Le problème, c'est qu'avant même que mon action ne soit traitée, Struts mets mes 2 booléens à la valeur true, que la checkbox soit cochée ou pas. Et ça je ne comprends vraiment pas pourquoi…
En effet, j'ai mis un point d'arrêt sur les setters de mes 2 booléens et lorsque je passe en debug je vois que les setters sont appelés avec comme paramètre true, même si les checkbox ne sont pas cochées, exactement comme s'il y avait une erreur de mapping entre mon formulaire et mon ActionForm (avant même d'arriver au traitement de mon action dans ma classe Action)… Pourquoi?
Selon la FAQ Struts, si la checkbox n'est pas cochée le champ associé devrait être à null, or il est à true…
Merci d'avance pour votre aide.
PS: j'ai essayé la même chose avec des String à la place des booléens et j'obtiens la même chose…
Partager