Ce qui est sur c'est que le plus simple si tu utilises des objets (et non pas des types primitifs ou des String) c'est d'implémenter ton converter.
La méthode public
Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2)
a pour rôle de tranformer une chaine de caractères (String) en un objet du type que tu veux manipuler. Le moyen pour y parvenir est à ta charge.
Dans ton code arg2 doit être la valeur qui sera située dans l'attribut value de l'option que tu auras sélectionnée. (Dans le code HTML je parle).
Et il faut que tu retournes l'objet qui correspond à ce choix.
La méthode
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2)
a le rôle opposé, c'est à dire qu'à partir de l'objet, tu dois retourner une chaine de caractère qui sera placée dans l'attribut value de la balise option dans ton code HTML.
Un exemple en vitesse:
Tu veux afficher une liste de voitures. Tu as des objets de type Voiture.
1 2 3 4 5
| public class Voiture {
private String id;
private String marque;
// on suppose qu'il y a les getters et setters
} |
Ta liste sera composée de SelectItem comme tu l'as déjà fait.
new SelectItem(uneVoiture, uneVoiture.getId())
Ton converter aura la tête suivante :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
// Le but ici est de retourner un objet de type Voiture qui correspond à la valeur arg2
// A toi de voir comment tu récupères l'objet voiture, si tu le crées, etc...
// Imaginons qu'on a une liste à disposition avec toutes les voitures connues
// de la forme List<Voiture> listeVoitures;
// tu pourrais faire :
for (Voiture voiture : listeVoitures) {
if (voiture.getId().equals(arg2) {
return voiture;
}
}
return null;
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
// ici le but est de retourner une chaine de caractère qui représente ta voiture passée en argument (arg2, et oui, c'est ta voiture !)
return ((Voiture) arg2).getId();
} |
Alors bien sur il y a des tests en plus à faire dans ces deux méthodes (le type est-il le bon, les valeurs ne sont-elles pas nulles, etc.)
Voilà l'idée. N'hésite pas à redemander si tu n'as pas compris.
Partager