dimanche 29 juillet 2012

Struts et la balise option/select

Struts met à disposition un moyen de générer un dropbox (liste déroulante) en HTML.
Son utilisation est assez simple finalement.
Voici un exemple d'utilisation.

Dans votre JSP, ajouté :
<%@taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<html:select property="proprietaire" >
  <html:optionsCollection name="InputForm"
    property="booleanList"
    label="label"
    value="value" />
</html:select>
Dans votre formulaire ajoutez :
import org.apache.struts.util.LabelValueBean;

public class InputForm extends ActionForm
{
    private String proprietaire ;

    private List<LabelValueBean> booleanList = new ArrayList<LabelValueBean>() ;
    
    public InputForm() 
    {
        booleanList.add(new LabelValueBean("OUI", "true")) ;
        booleanList.add(new LabelValueBean("NON", "false")) ;
    }

    public void setBooleanList(List<LabelValueBean> booleanList)
    {
        this.booleanList = booleanList;
    }

    public List<LabelValueBean> getBooleanList()
    {
        return booleanList;
    }

    public void setProprietaire(String proprietaire)
    {
        this.proprietaire = proprietaire;
    }

    public String getProprietaire()
    {
        return proprietaire;
    }
}
Le principe de fonctionnement est le suivant :
  • Struts génère la liste avec le contenu de l'attibut booleanList (property="booleanList") du formulaire InputForm (name="InputForm")
  • Ensuite, il prend la valeur de l'attribut proprietaire (property="proprietaire") pour sélectionner la bonne option.
  • A la validation du formulaire, il valorise l'attribut proprietaire.
Comment fait-il pour savoir ce qu'il faut afficher dans la liste et la valeur a transmettre ?
C'est l'attribut label="label" et value="value" qui indique quelle propriété de l'objet se trouvant dans la liste, prendre.
En effet, la classe LabelValueBean contient :
public class LabelValueBean implements Serializable
{
    private String label;
    private String value;
}
Cela veut donc dire qu'on peut utiliser nos propre objet et simplement indiquer les attributs à prendre.

Pour ceux qui ne souhaite pas utiliser de liste dynamique, il est possible d'utiliser directement :
<html:option value="0">Select Langue</html:option>
<html:option value="1">France</html:option>
<html:option value="2">English</html:option>
dans le html:select

Aucun commentaire:

Enregistrer un commentaire