Problème avec un selectOneMenu, Java Server Faces, erreur de validation !
Bonjour à tous !
Suite à une erreur de validation que je n'arrive pas à régler depuis trois jours, je me résigne à vous demander de l'aide:
Je récupère une liste d'utilisateurs dans une base de données...j'affiche dans le selectOneMenu les logins des utilisateurs présents dans la base...impossible d'avancer à cause d'une erreur de validation du style:
"formulaire_listeUtilisateurs:username : erreur de validation. La valeur est incorrecte. "
Mon selectOneMenu:
Code:
1 2 3 4 5 6
|
<h:selectOneMenu id="username" value="#{utilisateursManager.utilisateurSelectionne}" converter="#{utilisateurConverter}" validator="utilisateurValidator">
<f:selectItem itemLabel="#{msg['index.selectionne']}" />
<f:selectItems value="#{utilisateursManager.donneUtilisateurs}"
var="utilisateur" itemLabel="#{utilisateur.login}" itemValue="#{utilisateur}" />
</h:selectOneMenu> |
Mon bean managé:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
@ManagedBean(name="utilisateursManager")
@SessionScoped
public class UserManagedbean implements Serializable {
private static final long serialVersionUID = 1L;
/**
* Injection de nos EJB (Session Bean Stateless)
*/
@EJB
private UtilisateurDao dao;
// List<Information> pays;
private List<Utilisateur> listeUtilisateurs;
private Utilisateur utilisateurSelectionne;
public List<Utilisateur> getListeUtilisateurs() {
return listeUtilisateurs;
}
public void setlisteUtilisateurs(List<Utilisateur> liste) {
this.listeUtilisateurs = liste;
}
public Utilisateur getUtilisateurSelectionne() {
return utilisateurSelectionne;
}
public void setUtilisateurSelectionne(Utilisateur utilisateur) {
this.utilisateurSelectionne = utilisateur;
}
//remplissage de la liste derroulante
public List<Utilisateur> getDonneUtilisateurs(){
System.out.println("Fonction getDonneUtilisateurs");
listeUtilisateurs = dao.trouver();
// this.utilisateurSelectionne = (Utilisateur) listeUtilisateurs.get(1);
return listeUtilisateurs;
}
//remplissage de la liste derroulante
public String verifierMotDePasse(){
return "acceuil.xhtml";
}
} |
Mon "converter":
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
@ManagedBean
@SessionScoped
public class UtilisateurConverter implements Converter, Serializable {
private static final long serialVersionUID = 1L;
@Override
public Object getAsObject(FacesContext context, UIComponent component,
String value) {
UserManagedbean bean = (UserManagedbean) ((HttpSession)context.getExternalContext().getSession(true)).getAttribute("utilisateursManager");
List<Utilisateur> userList = bean.getDonneUtilisateurs();
for(int i=0; i<userList.size(); i++) {
Utilisateur user = userList.get(i);
if(user.getLogin().equals(value)) {
System.out.println("DANSCONVERTEROBJECT trouve user:" + user.getLogin());
return user;
}
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
System.out.println("DANSCONVERTERSTRING");
if (value==null){
System.out.println("DANSCONVERTERSTRING value=null, return null:");
return null;
} else {
Utilisateur user = (Utilisateur) value;
return user.getLogin() != null ? user.getLogin() : null;
}
}
} |
D'après ce que je comprends, le "validator" vérifie que j'ai bien sélectionné dans la liste un bon utilisateur, donc un utilisateur qui existe dans la liste des utilisateurs de mon bean managé...pour cela, le "itemValue" de mon menu pointe bien vers un "Utilisateur"...qui est comparé à un de la liste du bean...Mais, vu mes explications, il y a un truc que je ne dois pas comprendre...Désolé...
Merci par avance
Sébastien