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 :

selectOneMenu selection par defaut et changement selection


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Par défaut selectOneMenu selection par defaut et changement selection
    Bonjour,

    je viens vers vous car j'ai un problème avec le selectOneMenu de PrimeFaces. Je n'arrive pas à le faire fonctionner correctement et avec ce que je lis sur le net je suis pomé. J'ai tellement testé de trucs que je ne sais pas si ce que j'ai fini par mettre dans mes fichiers m'aide ou non.

    Mon problème : Je ne parviens pas à mettre une valeur par défaut dans ma liste (c'est toujours la 1ere valeur qui est présélectionnée). Et je ne parviens pas à récupérer la valeur sélectionné par l'utilisateur, elle reste toujours inchangée : en fait le setter n'est jamais appelé.

    La fameuse liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <h:outputLabel for="envselect" value="Environnement :" />  
    <h:selectOneMenu id="envselect" value="#{pageInstanceBean.envSelected}" converter="#{environnementConverter}">  
    	<f:selectItems value="#{pageInstanceBean.envAvailable}" />
    	<f:ajax execute="envselect" render="inputEnvNom" />		         
    </h:selectOneMenu>  
    <p:message for="envselect" />
    <h:outputText id="inputEnvNom" value="#{pageInstanceBean.envSelected.nomEnv}" />
    Ma pageInstanceBean :
    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
     
    @ManagedBean
    @ViewScoped
    public class PageInstanceBean implements Serializable
    {
        private Environnement envSelected;
     
        private List<SelectItem> envAvailable;
     
        @EJB
        private EnvironnementDao _environnementDao;
     
        //getter setter
     
        public Environnement getEnvSelected() 
        {
        	System.out.println("GET env = "+envSelected+" nom = "+envSelected.getNomEnv());
        	return envSelected;
        }
     
        public void setEnvSelected(Environnement envSelected) 
        {
    	this.envSelected = envSelected;
    	System.out.println("SET env = "+this.envSelected.getNomEnv());
         }
    }
    Sur le net un coup il faut pour l'item sélectionné le mettre en String, un autre il faut l'id, et un autre moment c'est sous forme d'Objet... Finalement pour la suite je me suis dis que le mieu est de l'avoir sous forme d'objet. Et de même pour la liste des item disponible j'ai vu une liste<Objet> ou une liste<SelectItem>.
    Franchement avec tous ces choix, j'ai un peu tout testé et finalement rien compris. Donc si quelqu'un pourrais m'expliquer tout sa pour que je puisse faire le bon choix...

    Avec tout sa aparement j'avais besoin d'un converter :
    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
     
    @FacesConverter(forClass = Environnement.class)
    public class EnvironnementConverter implements Converter 
    {
    	@EJB
    	private EnvironnementDao _environnementDao;
     
    	@Override
    	public Object getAsObject(FacesContext context, UIComponent component, String value) 
    	{
    		if (value.trim().equals("") || value.trim().length() == 0) 
    		{
                return null;
            }
     
    		if (_environnementDao != null)
    		{
    	        Environnement env = new Environnement();
    	        env =_environnementDao.trouver(value);
    	        return env;
    		}
    		else
    		{
    			return null;
    		}
        }
     
    	@Override
    	public String getAsString(FacesContext context, UIComponent component, Object value) 
    	{
    		if (value == null)
    		{
    			return null;
    		}
     
    		if (value instanceof Environnement)
    		{
    			Environnement env = (Environnement) value;
    			return env.getNomEnv();
    		}
    		else
    		{
    			return null;
    		}
    	}   
    }
    Et pour pouvoir utiliser des ejb dans un converter j'avais besoin dans mon fichier faces-config de sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <managed-bean>
    	<managed-bean-name>environnementConverter</managed-bean-name>
    	<managed-bean-class>com.converter.EnvironnementConverter</managed-bean-class>
    	<managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    Et j'avais besoin d'ajouter dans ma classe Environnement ceci :
    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
     
    @Entity
    @Table(name="Environnement")
    public class Environnement 
    {
        @Id
        @GeneratedValue( strategy = GenerationType.IDENTITY )
        @Column( name = "idEnv" )
        private int idEnv;
     
        @Column( name = "nomEnv" )
    	private String nomEnv;
     
        @OneToMany(mappedBy="idEnv")
        private List<Instance> instanceList; 
     
    	//getter setter
     
    	public boolean equals(Environnement e)
    	{
    		boolean result = true;
     
    		if (this.nomEnv != e.nomEnv)
    		{
    			result = false;
    		}
     
    		return result;
    	}
     
    	@Override
        public int hashCode() 
    	{
            int hash = 1;
            hash = hash * 17 + idEnv;
            return hash;
        }
     
    	@Override
        public String toString() 
    	{
            return this.nomEnv;
        }
    }
    Avec tout sa maintenant quand je tente d'afficher directement envSelected j'obtient son nomEnv. Ce que je voulais. Comme j'ai cru comprendre que pour préselectionner une valeur PrimeFaces comparait le itemSelect avec la listItems et s'il y avait une correspondance c'était bon. Mais finalement il compare quoi ?
    Néanmoins ma liste se remplis correctement, la conversion fonctionne (dans mes log je le vois), mais le reste...

    Le seul endroit où je vois que la valeur sélectionnée est bien la bonne c'est dans la méthode getAsObject de mon converter car le String value prend bien la valeur que je viens de sélectionner... Le converter envois l'object généré à qui apres ?

    Si quelqu'un à une idée, une explication ? Merci

  2. #2
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    ya t-il eu une erreur de copy ou pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @OneToMany(mappedBy="idEnv")
        private List<Instance> instanceList;
    car
    est le id de classe et si non peux-tu nou montrer le contenu de la classe Instance

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Par défaut
    Alors non il n'y a pas d'erreur de copie mais je sens qu'on va me dire que finalement j'ai tout compris de travers... ><

    J'ai cru comprendre que quand on a une bd de ce type (ce qui suis est du merise):

    Table A ---------------------------------------- Table B
    idA -----1,1 -------------------------- 1,* ----- idB


    On devait traduire sa par :
    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
     
    @Entity
    public class A
    {
        @Column
        private int idA;
     
        @ManyToOne
        @JoinColumn...
        private B idB;
    }
     
    @Entity
    public class B
    {
        @Column
        private int idB;
     
        @OneToMany(mappedBy="idB")
        private List<A> listB;
    }
    Après j'ai peu etre mal compris et dans ce cas dites le moi !

    Donc ma classe instance :
    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
     
    @Entity
    @Table(name="Instance")
    public class Instance 
    {
        @Id
        @GeneratedValue( strategy = GenerationType.IDENTITY )
        @Column( name = "idInstance" )
        private int idInstance;
     
        //pleins d'autres proprietes
     
        @ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH })
        @JoinColumn( name = "idEnv" )
        private Environnement idEnv;
     
        //getter setter
    }
    Si j'ai mis le nom idEnv c'est que finalement dans ma base de donnée c'est une clé étrangère vers ma table. Et j'ai gardé ce nom pour ne pas m'embrouiller.

  4. #4
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    voici un exemple:
    Nom : OneToMany.png
Affichages : 1351
Taille : 126,5 Ko

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Par défaut
    Si je ne me trompe pas c'est ce que j'ai fais...

  6. #6
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Bonjour Lolosan,

    Tu parles d'un selectOneMenu de PrimeFaces, ce devrait être p:selectOneMenu et pas h:selectOneMenu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. code RGB de la Couleur de selection par defaut
    Par radzar dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 05/09/2007, 19h00
  2. selection par defaut zone de liste multiselect
    Par petitours dans le forum IHM
    Réponses: 1
    Dernier message: 06/08/2007, 19h03
  3. html:radio - sélection par défaut
    Par zizou771 dans le forum Struts 1
    Réponses: 3
    Dernier message: 05/07/2006, 12h26
  4. [Struts] valeur par defaut de html:select
    Par pmartin8 dans le forum Struts 1
    Réponses: 4
    Dernier message: 03/05/2006, 22h29
  5. Table par defaut dans un select sur 2 tables
    Par gibee dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/10/2005, 21h05

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