IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Récupération d'un élément d'un SelectOneMenu


Sujet :

JSF Java

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut Récupération d'un élément d'un SelectOneMenu
    Bonjour,

    malgré mes recherches sur le forum et le net, je n'ai pas trouvé de solution à mon problème.
    J'ai un selectonemenu bien alimenté par la méthode goToRecherche(). Quand je sélectionne un élément de la liste, mon managed bean me dit que l'élément est null. Pourquoi?

    ManagedBean :
    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
    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
    48
    49
    public class RechercheBean {
     
    	private ArrayList<SelectItem> listRegion;
    	private Region region;
     
    	public RechercheBean(){
    		listRegion = new ArrayList<SelectItem>();
    	}
     
     
    	public RechercheBean(ArrayList<SelectItem> listRegion) {
    		super();
    		this.listRegion = listRegion;
    	}
     
     
    	public String goToRecherche(){
    		listRegion = new ArrayList<SelectItem>();
    		ArrayList<Region> tempList = VinUtil.getRegionList();
    		Iterator<Region> it = tempList.iterator();
    		while (it.hasNext()){
    			Region current = (Region) it.next();
    			SelectItem item = new SelectItem(current, current.getNom());
    			listRegion.add(item);
    		}
    		return "success";
    	}
     
    	public String getSelectedRegion(){
    		System.out.println(region.getNom());
    		return "";
    	}
     
    		public void setListRegion(ArrayList<SelectItem> listRegion) {
    		this.listRegion = listRegion;
    	}
     
    	public ArrayList<SelectItem> getListRegion() {
    		return listRegion;
    	}
     
    	public void setRegion(Region region) {
    		this.region = region;
    	}
     
    	public Region getRegion() {
    		return region;
    	}
    }
    Ma page JSP :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        <h:form>
    	  	<f:view>
    	  		<h:selectOneMenu id="regionId" value="#{rechercheBean.region.nom}">
    	  			<f:selectItems id="selectRegion" value="#{rechercheBean.listRegion}"/>
    	  		</h:selectOneMenu>
    	  		<h:commandButton action="#{rechercheBean.getSelectedRegion }"></h:commandButton>
    	  	</f:view>
      	</h:form>

    L'erreur générée est :
    javax.el.PropertyNotFoundException: /WEB-INF/jsp/recherche.jsp @10,73 value="#{rechercheBean.region.nom}": Target Unreachable, 'region' returned null
    at com.sun.facelets.el.TagValueExpression.getType(TagValueExpression.java:62)
    Merci pour votre aide.

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 68
    Par défaut
    Essaie avec ça pour voir
    Moi j'utilise foreach c'est plus simple
    Code java : 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
    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
    48
    49
    50
    51
    52
    53
    54
     
    public ArrayList<Region> regions;
    	public ArrayList<SelectItem> listNoms;
    	public EmployeBean2() {
     
    	}
     
    	public ArrayList<SelectItem> getListNoms() {
     
     
    		if(listNoms==null){
    			listNoms=new ArrayList<SelectItem>();
    		for (Region reg : getRegions()) {
    			SelectItem selectItem=new SelectItem();
    			selectItem.setLabel(String.valueOf(reg.getNom()));
    			selectItem.setValue(String.valueOf(reg.getNom()));
    			}
    			listNoms.add(selectItem);
    		}
    		}
     
    		Collections.sort(listNoms, new SecletItemComparator());
    		//si tu veux trier par ordre alphabetique
     
    return listNoms; 
     
    	}
     
     
     
    	public void setListNoms(ArrayList<SelectItem> listNoms) {
    		this.listNoms = listNoms;
     
     
    	}
    	public ArrayList<Region> getRegions() {
    		if(regions==null)
    			regions = tonService.finRegions();
    		return regions;
    	}
     
     
     
    	public void setRegions(ArrayList<Region> regions) {
    		this.regions = regions;
    	}
     
    //Dans ton service il faut implémenter une méthode qui chargera toutes tes regions
    	public ArrayList<Region> findRegions(){
    		ArrayList<Region> find = (ArrayList<Region>) this.getHibernateTemplate().loadAll(Employe.class);
    		return find;
     
    	}
    // moi j'utilise hibernate dc j'utilise getHibernateTemplate
    et puis essaie de déclarer un nom dans ton bean et fais le binding directement avec le SelectOneMenu "#{nomdetonBean.nom}"
    J'espère que ça t'aidera

  3. #3
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Salut,

    Target Unreachable, 'region' returned null
    Ça me parait clair: region est nul.
    En checkant le code, en effet region est nul.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private ArrayList<SelectItem> listRegion;
    	private Region region;
     
    	public RechercheBean(){
    		listRegion = new ArrayList<SelectItem>();
    	}
    Il faut donc que tu initialises région avec une région de ta liste, soit qu'en cas de region null tu ne demandes pas #{rechercheBean.region.nom}.

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Merci pour ta réponse,

    mais en fait mon problème ne se situe pas dans la génération de la liste qui est bonne mais juste dans l'affectation de la valeur sélectionnée.

    En principe je dois pouvoir faire le binding avec region.nom sans problème mais pourtant il me dit que region est null après l'avoir sélectionné. Comme s'il le re initialisait quand je clique sur le commandbutton.

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 68
    Par défaut
    ajoute un attribut nom static a ton bean et essaie

  6. #6
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    En lisant un peu plus attentivement, tu remplis ta list avec des Region dont tu affiches le nom:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SelectItem item = new SelectItem(current, current.getNom());
    Mais l'objet que tu récupère devrait être une région si mes vieux souvenirs de jsf ne sont pas trop pourris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:selectOneMenu id="regionId" value="#{rechercheBean.region}">

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Citation Envoyé par Heimdal Voir le message
    Salut,



    Ça me parait clair: region est nul.
    En checkant le code, en effet region est nul.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private ArrayList<SelectItem> listRegion;
    	private Region region;
     
    	public RechercheBean(){
    		listRegion = new ArrayList<SelectItem>();
    	}
    Il faut donc que tu initialises région avec une région de ta liste, soit qu'en cas de region null tu ne demandes pas #{rechercheBean.region.nom}.
    Heimdal : Je ne comprends pas trop, à quel moment dois je initialiser region? Si c'est dans le constructeur ça ne va pas car ça va écraser la valeur que j'ai sélectionnée dans ma liste. Normalement region s'initialise avec la valeur que j'ai sélectionné dans la liste, non?

    soffru : j'ai essayé de faire le lien avec une variable de mon bean mais j'obtiens un :
    java.util.NoSuchElementException
    at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:130)

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Citation Envoyé par Heimdal Voir le message
    En lisant un peu plus attentivement, tu remplis ta list avec des Region dont tu affiches le nom:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SelectItem item = new SelectItem(current, current.getNom());
    Mais l'objet que tu récupère devrait être une région si mes vieux souvenirs de jsf ne sont pas trop pourris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:selectOneMenu id="regionId" value="#{rechercheBean.region}">

    Si je mets juste : #{rechercheBean.region} ça ne change pas le fait que region = null quand la JSP redonne la main au managed bean. Je pensais qu'un managed bean initialisait directement ses propriétés avec les données renseignées dans la JSP si elles le sont. Mais a priori ce n'est pas le cas...

  9. #9
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Je pense que si, ca change tout puisque ca va assigner l'objet sélectionné (qui est une Region) à l'attribut Region (qui est une Region, cool ca colle).

    Car tel quel tu essayes d'assigner l'Objet sélectionner à la propriété nom de ton attribut Region (qui est null jusque la)

    Je suis pas sur d être clair.?

  10. #10
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    En fait, je t'affirmais que dans mon cas, après avoir changé ma JSP comme tu me l'as indiqué, quand je clique sur le CommandButton, ça me renvoie sur le constructeur du managed Bean( dans lequel j'ai rajouté : region= new Region() )

    Je me suis dit qu'il allait affecter ma valeur sélectionnée dans ma liste déroulante lors du setRegion(). Le problème c'est qu'il passe dans le getRegion(Region region) en premier et là, il me dit :
    sourceId=j_id4:regionId[severity=(ERROR 2), summary=(Erreur de conversion quand la valeur 'com.model.Region@1f87baf' est commise pour le modéle 'null Converter'.), detail=(Erreur de conversion quand la valeur 'com.model.Region@1f87baf' est commise pour le modéle 'null Converter'.)]

    C'est normal puisque dans le constructeur je fais region = new Region() donc région est vide.
    (J'ai essayé en retirant region = new Region() mais j'ai la même erreur)

    Moi je voulais juste récupérer la valeur que j'ai sélectionné, ca ne devrait pas être compliqué pourtant...

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 68
    Par défaut
    voici mon bean de recherche j'espere que ca va t'aider moi ca marche a 100%moi je recherche grace a un id toi si t'as un autre critere de recherche applique le mais c'est generalement le meme esprit
    Code java : 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
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
     
    package com.sungard.beans;
     
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Date;
     
    import com.sungard.persistence.Employe;
    import com.sungard.service.IEmployeService;
     
    public class EmployeBean2 {
     
     
    	private String id;
     
    	private static int idf;
    	private static String nom;
    	private static String prenoms;
    	private static Date date;
    	private static float sal;
    	private static String fct;
     
    	private IEmployeService empServ;
    	public ArrayList<Employe> employes;
    	public ArrayList<SelectItem> listIds;
    	public EmployeBean2() {
     
    	}
     
    	public ArrayList<SelectItem> getListIds() {
     
    		System.out.println("employes list size: "+getEmployes().size());
    		if(listIds==null){
    			listIds=new ArrayList<SelectItem>();
    		for (Employe emp : getEmployes()) {
    			SelectItem selectItem=new SelectItem();
    			if(emp.getId()/10<1){
    				selectItem.setLabel("0"+String.valueOf(emp.getId()));
    				selectItem.setValue("0"+String.valueOf(emp.getId()));
    			}else{
    			selectItem.setLabel(String.valueOf(emp.getId()));
    			selectItem.setValue(String.valueOf(emp.getId()));
    			}
    			listIds.add(selectItem);
    		}
    		}
     
    		Collections.sort(listIds, new SecletItemComparator());
    		return listIds; 
     
    	}
     
     
     
    	public void setListIds(ArrayList<SelectItem> listIds) {
    		this.listIds = listIds;
     
     
    	}
    	public ArrayList<Employe> getEmployes() {
    		if(employes==null)
    			employes = empServ.findEmployes();
    		return employes;
    	}
     
     
     
    	public void setEmployes(ArrayList<Employe> employes) {
    		this.employes = employes;
    	}
     
     
     
    	public String findAction(){
     
    		idf=Integer.parseInt(id.toString());
     
    		Employe employe=empServ.getEmployeById(Integer.parseInt(id.toString()));
     
    		System.out.println(employe.getNom());
     
    		setNom(employe.getNom());
     
    		setPrenoms(employe.getPrenom());
     
    		setDate(employe.getDate_embauche());
     
    		setSal(employe.getSalaire());
     
    		setFct(employe.getFonction());
     
    		return "success";
     
    		}
     
    	public void setEmpServ(IEmployeService empServ) {
    		this.empServ = empServ;
    	}
     
    	public IEmployeService getEmpServ() {
    		return empServ;
    	}
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
     
     
    	public static String getNom() {
    		return nom;
    	}
     
    	public static void setNom(String nom) {
    		EmployeBean2.nom = nom;
    	}
     
    	public static String getPrenoms() {
    		return prenoms;
    	}
     
    	public static void setPrenoms(String prenoms) {
    		EmployeBean2.prenoms = prenoms;
    	}
     
    	public static Date getDate() {
    		return date;
    	}
     
    	public static void setDate(Date date) {
    		EmployeBean2.date = date;
    	}
     
    	public static float getSal() {
    		return sal;
    	}
     
    	public static void setSal(float sal) {
    		EmployeBean2.sal = sal;
    	}
     
    	public static String getFct() {
    		return fct;
    	}
     
    	public static void setFct(String fct) {
    		EmployeBean2.fct = fct;
    	}
     
    	public static int getIdf() {
    		return idf;
    	}
     
    	public static void setIdf(int idf) {
    		EmployeBean2.idf = idf;
    	}
    }
    et voici le code html de mon interface
    Code html : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     <%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Recherche Employé</title>
    </head>
    <body>
     
    <f:view>
     
    	<h1>Bienvenu dans la recherche des employés</h1>
    	<h:form>
     
     
     
    			<h:panelGrid border="1" columns="2"
    				style="width: 188px; height: 35px">
    				<h:outputText value="ID"></h:outputText>
     
    				<h:selectOneMenu  style="width:165px; height: 19px" id="ncin" 
    					onchange="submit()"
    					value="#{employeBean2.id}" >
    					<f:selectItems value="#{employeBean2.listIds}" />
    				</h:selectOneMenu>	
    </h:panelGrid>
    <h:panelGrid  border="1" columns="1"
    				style="width: 188px">
    				<h:commandButton value="FIND" action="#{employeBean2.findAction}"
    					style="width: 188px; height: 35px" id="find" immediate="true" />
    			</h:panelGrid>
    	</h:form>
    </f:view>
    </body>
    </html>

  12. #12
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Citation Envoyé par soffru Voir le message
    voici mon bean de recherche j'espere que ca va t'aider moi ca marche a 100%moi je recherche grace a un id toi si t'as un autre critere de recherche applique le mais c'est generalement le meme esprit
    Code java : 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
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
     
    package com.sungard.beans;
     
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Date;
     
    import com.sungard.persistence.Employe;
    import com.sungard.service.IEmployeService;
     
    public class EmployeBean2 {
     
     
    	private String id;
     
    	private static int idf;
    	private static String nom;
    	private static String prenoms;
    	private static Date date;
    	private static float sal;
    	private static String fct;
     
    	private IEmployeService empServ;
    	public ArrayList<Employe> employes;
    	public ArrayList<SelectItem> listIds;
    	public EmployeBean2() {
     
    	}
     
    	public ArrayList<SelectItem> getListIds() {
     
    		System.out.println("employes list size: "+getEmployes().size());
    		if(listIds==null){
    			listIds=new ArrayList<SelectItem>();
    		for (Employe emp : getEmployes()) {
    			SelectItem selectItem=new SelectItem();
    			if(emp.getId()/10<1){
    				selectItem.setLabel("0"+String.valueOf(emp.getId()));
    				selectItem.setValue("0"+String.valueOf(emp.getId()));
    			}else{
    			selectItem.setLabel(String.valueOf(emp.getId()));
    			selectItem.setValue(String.valueOf(emp.getId()));
    			}
    			listIds.add(selectItem);
    		}
    		}
     
    		Collections.sort(listIds, new SecletItemComparator());
    		return listIds; 
     
    	}
     
     
     
    	public void setListIds(ArrayList<SelectItem> listIds) {
    		this.listIds = listIds;
     
     
    	}
    	public ArrayList<Employe> getEmployes() {
    		if(employes==null)
    			employes = empServ.findEmployes();
    		return employes;
    	}
     
     
     
    	public void setEmployes(ArrayList<Employe> employes) {
    		this.employes = employes;
    	}
     
     
     
    	public String findAction(){
     
    		idf=Integer.parseInt(id.toString());
     
    		Employe employe=empServ.getEmployeById(Integer.parseInt(id.toString()));
     
    		System.out.println(employe.getNom());
     
    		setNom(employe.getNom());
     
    		setPrenoms(employe.getPrenom());
     
    		setDate(employe.getDate_embauche());
     
    		setSal(employe.getSalaire());
     
    		setFct(employe.getFonction());
     
    		return "success";
     
    		}
     
    	public void setEmpServ(IEmployeService empServ) {
    		this.empServ = empServ;
    	}
     
    	public IEmployeService getEmpServ() {
    		return empServ;
    	}
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
     
     
    	public static String getNom() {
    		return nom;
    	}
     
    	public static void setNom(String nom) {
    		EmployeBean2.nom = nom;
    	}
     
    	public static String getPrenoms() {
    		return prenoms;
    	}
     
    	public static void setPrenoms(String prenoms) {
    		EmployeBean2.prenoms = prenoms;
    	}
     
    	public static Date getDate() {
    		return date;
    	}
     
    	public static void setDate(Date date) {
    		EmployeBean2.date = date;
    	}
     
    	public static float getSal() {
    		return sal;
    	}
     
    	public static void setSal(float sal) {
    		EmployeBean2.sal = sal;
    	}
     
    	public static String getFct() {
    		return fct;
    	}
     
    	public static void setFct(String fct) {
    		EmployeBean2.fct = fct;
    	}
     
    	public static int getIdf() {
    		return idf;
    	}
     
    	public static void setIdf(int idf) {
    		EmployeBean2.idf = idf;
    	}
    }
    et voici le code html de mon interface
    Code html : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     <%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Recherche Employé</title>
    </head>
    <body>
     
    <f:view>
     
    	<h1>Bienvenu dans la recherche des employés</h1>
    	<h:form>
     
     
     
    			<h:panelGrid border="1" columns="2"
    				style="width: 188px; height: 35px">
    				<h:outputText value="ID"></h:outputText>
     
    				<h:selectOneMenu  style="width:165px; height: 19px" id="ncin" 
    					onchange="submit()"
    					value="#{employeBean2.id}" >
    					<f:selectItems value="#{employeBean2.listIds}" />
    				</h:selectOneMenu>	
    </h:panelGrid>
    <h:panelGrid  border="1" columns="1"
    				style="width: 188px">
    				<h:commandButton value="FIND" action="#{employeBean2.findAction}"
    					style="width: 188px; height: 35px" id="find" immediate="true" />
    			</h:panelGrid>
    	</h:form>
    </f:view>
    </body>
    </html>
    Merci, je vais etudier ça...

    J'ai l'impression qu'on a un managed bean quasi similaire (excepté la construction de la liste, mais la façon dont je construis la mienne fonctionne donc je la laisse telle quelle).

    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
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    package com.managed.bean;
    import java.util.ArrayList;
    import java.util.Iterator;
    import javax.faces.model.SelectItem;
    import com.model.Region;
    import com.utils.VinUtil;
     
    public class RechercheBean {
     
    	private ArrayList<Region> mesRegion;
    	private ArrayList<SelectItem> listItem;
    	private String nomRegion;
     
    	public RechercheBean(){
    	}
     
    	public RechercheBean(ArrayList<Region> listRegion) {
    		super();
    	}
     
    	public String goToRecherche(){
     
    		return "success";
    	}
     
    	public String getSelectedRegion(){
    		System.out.println(nomRegion);
    		return "";
    	}
     
    	public void setNomRegion(String nomRegion) {
    		this.nomRegion = nomRegion;
    	}
     
    	public String getNomRegion() {
    		return nomRegion;
    	}
     
    	public Region getNullRegion(){
    		return new Region();
    	}
    	public ArrayList<Region> getMesRegion() {
    		return mesRegion;
    	}
     
    	public void setMesRegion(ArrayList<Region> mesRegion) {
    		this.mesRegion = mesRegion;
    	}
     
    	public ArrayList<SelectItem> getListItem() {
    		mesRegion = VinUtil.getRegionList();
    		listItem = new ArrayList<SelectItem>();
    		Iterator<Region> it = mesRegion.iterator();
    		while (it.hasNext()){
    			Region current = (Region) it.next();
    			SelectItem item = new SelectItem(current, current.getNom());
    			listItem.add(item);
    		}
    		return listItem;
    	}
     
    	public void setListItem(ArrayList<SelectItem> listItem) {
    		this.listItem = listItem;
    	}
     
    }
    Ma JSF :
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core">
     
        <h:form>
    	  	<f:view>
    	  		<h:selectOneMenu id="regionId" value="#{rechercheBean.nomRegion}">
    	  			<f:selectItem itemLabel="" itemValue="#{rechercheBean.nullRegion}"/>
    	  			<f:selectItems id="selectRegion" value="#{rechercheBean.listItem}"/>
    	  		</h:selectOneMenu>
    	  		<h:commandButton action="#{rechercheBean.getSelectedRegion }"></h:commandButton>
    	  	</f:view>
      	</h:form>  
    </html>

    Quand je clique sur le commandButton, il passe dans tous les getters, et il plante dans le getNomRegion() :
    8 déc. 2009 16:32:42 com.sun.faces.lifecycle.RenderResponsePhase execute
    INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
    sourceId=j_id4:regionId[severity=(ERROR 2), summary=(j_id4:regionId: Erreur de validation: Valeur not valid.), detail=(j_id4:regionId: Erreur de validation: Valeur not valid.)]
    J'ai pourtant sélectionné une region dans ma liste.

  13. #13
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Apres analyse du code de soffru, et adaptation au mien j'ai fini par trouver l'erreur, mais je ne la comprends pas.

    Si je construis ma liste comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (it.hasNext()){
            Region current = (Region) it.next();
            SelectItem selectItem=new SelectItem(current.getId().intValue()),current.getNom());
    	listItem.add(selectItem);
    }
    ça passe.
    Si je construis ma liste comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (it.hasNext()){
    	Region current = (Region) it.next();
    	SelectItem selectItem=new SelectItem(String.valueOf(current,current.getNom());
    	listItem.add(selectItem);
    }
    J'ai l'erreur :
    8 déc. 2009 18:19:11 com.sun.faces.lifecycle.RenderResponsePhase execute
    INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
    sourceId=j_id4:regionId[severity=(ERROR 2), summary=(j_id4:regionId: Erreur de validation: Valeur not valid.), detail=(j_id4:regionId: Erreur de validation: Valeur not valid.)]
    Je suis content que ça marche. Mais je ne sais pas pourquoi. Si quelqu'un a la reponse...

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/10/2007, 10h50
  2. Récupération de certains éléments d'une BDD
    Par DaisyVIP dans le forum ASP.NET
    Réponses: 27
    Dernier message: 08/06/2007, 15h20
  3. Réponses: 3
    Dernier message: 11/05/2007, 16h27
  4. [Formulaire] Récupération d'un élément de select
    Par toddy_101 dans le forum Langage
    Réponses: 7
    Dernier message: 22/01/2007, 17h05
  5. [PL/SQL] Curseur - Récupération du dernier élément
    Par dupont166 dans le forum Oracle
    Réponses: 5
    Dernier message: 27/12/2005, 04h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo