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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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)

  5. #5
    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.

  6. #6
    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

  7. #7
    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}">

  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...

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