2013-01-18 3 views
2

J'utilise Struts 2 et Freemarker. Ceci est ma classe d'action:Comment passer plusieurs cases à cocher à l'action

package test; 

import java.util.ArrayList; 
import java.util.List; 

public class WelcomeAction { 

    private String userName; 
    private String gender; 
    private List<String> fruits; 
    private String fruit; 


    public String execute() { 
//  if(!userName.equals("a")) 
//  { 
//   return "fail"; 
//  } 
//  else { 
//   return "SUCCESS";   
//  } 
     return "SUCCESS"; 
    } 

    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 


    public String getGender() { 
     return gender; 
    } 

    public void setGender(String gender) { 
     this.gender = gender; 
    } 

    public String getFruitsPicked() { 
     return fruit; 
    } 

    public void setFruitsPicked(String fruitsPicked) { 
     this.fruit = fruitsPicked; 
    } 

    public List<String> getFruits() { 
     return fruits; 
    } 

    public void setFruits(List<String> fruits) { 
     this.fruits = fruits; 
    } 

    public WelcomeAction(){ 
     fruits = new ArrayList<String>(); 
     fruits.add("apples"); 
     fruits.add("oranges"); 
     fruits.add("pears"); 
     fruits.add("peaches"); 
    } 
} 

C'est ce que j'ai dans mon .ftl:

<input type="checkbox" list="fruits" name="friut[]" value="apples" /> Apples<br /> 
<input type="checkbox" list="fruits" name="friut[]" value="oranges" /> Oranges<br /> 
<input type="checkbox" list="fruits" name="friut[]" value="pears" /> Pears<br /> 
<input type="checkbox" list="fruits" name="friut[]" value="peaches" /> Peaches<br /> 

Voici comment j'ai essayé l'impression:

<#list fruits as item>${item}</#list> 

Mais au-dessus imprime commande affiche tous les éléments dans ma liste que j'ai ajouté dans mon constructeur. Bien sûr, je ne veux que les éléments qui ont été vérifiés lorsque le formulaire a été soumis.

Répondre

3

name="friut[]" doit être name="fruits". Le nom de la propriété JavaBean est fruits, et non fruit (ni friut ... Notez la faute de frappe). Je ne sais pas à ce sujet [] est significatif pour Struts, mieux dit, pour OGNL/ValueStack.setValue que les utilisations ParametersIntercaptor. (Il comprend fruits[0], ce qui est utile pour définir un élément dans une liste existante). Donc, à la fin, Struts a ignoré les paramètres, donc vous vous retrouvez avec la liste originale. D'où vient le list="fruits"?

1

Vous pouvez utiliser

<s:checkboxlist name="fruit" list="fruits"/> 

Vous n'avez pas besoin de conserver plusieurs valeurs checkbox'es dans les multiples champs <input>, donc il n'y a pas beaucoup de <input> nécessaires champs. Struts2 devrait le rendre approprié. Plusieurs valeurs viendront à l'action avec valeurs séparées par des virgules.

Dans votre code, vous devez ajouter des getters et setters pour list de la même manière que pour fruit qui contient les valeurs sélectionnées. L'interseptor params fera son travail en remplissant votre action appelée avec le setter lorsque le formulaire est soumis.