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 :

Pb selectOneMenu dans dataTable


Sujet :

JSF Java

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 34
    Par défaut
    Alors si je te suis, je déclare un bean qui pointe vers mon POJO TypeUtilisateur.
    J'ajoute une propriété dans mon messageBean du même nom que le bean précédemment créé.
    Je suppose que je dois retoucher mon selectOneMenu pour qu'il utilise la propriété typeUtilisateur ?

    Je récupère toujours l'ancienne valeur !!

    Je ne comprends pas du tout quel est le lien entre ce nouveau bean et le selectOneMenu sur le typeUtilisateur de mon objet métier Message représentant une ligne de mon tableau en fait...

  2. #22
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    non si je comprend bien la valeur du selectOneMenu peut être déclaré comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MessageBean mess = new MessageBean();
     
    TypeUtilisateur typeUtilisateur = new TypeUtilisateur();
     
    typeUtilisateur.setTypeUtilisateurId(value);
     
    mess.setTypeUtilisateur(typeUtilisateur );
    JSF doit chercher à donner mettre la valeur dans le bean TypeUtilisateur, donc il faut qu'il soit 'managé' par JSF.

    Je te donne cette piste parceque en testant chez moi avec avec une valeur appartenant au bean déclaré, seulement MessageBean ça marchait bien.

  3. #23
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 34
    Par défaut
    On pourrait dire que c'est le code sous-jasent qu'il y aurait derrière le selectOneMenu.

    Donc, il faut que le typeUtilisateur soit 'managé' par JSF car contrairement aux types communs (String...), JSF ne sais pas où trouver les get/set correspondants...

    Bref, si tu pouvais me mettre en vrac tes fichiers de tests que je jette un coup d'oeil (voir s'il me manque quelque chose) sur la solution que tu as faite tourner...

    Merci de tes efforts, jvais continuer à chercher et posterai dès que je trouverai une solution ;p

  4. #24
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    non j'ai testé sur une application
    j'ai testé aussi des valeurs de type String...

  5. #25
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 34
    Par défaut
    OK
    Par contre, je n'ai aucun problème avec des valeurs de type String en effet.
    Je vais donc creuser ta piste et voir ce que ça me donne...

  6. #26
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 34
    Par défaut
    Bon, ça y est, j'ai trouvé ma solution.

    Voilà ce que je faisais avant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:selectOneMenu id="selectTypeId" styleClass="sansBord" value="#{mess.typeUtilisateur.idTypeUtilisateur}" >
    	    					<f:selectItems value="#{messageBean.tousLesTypesUtilisateurs}"/>
    	    				</h:selectOneMenu>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    List<TypeUtilisateur> l = MessageDelegate.getAllTypeUtilisateurs();
    			this.tousLesTypesUtilisateurs = new ArrayList<SelectItem>();
    			for(TypeUtilisateur t : l){
    				this.tousLesTypesUtilisateurs.add(new SelectItem(t.getIdTypeUtilisateur(),t.getLibelleTypeUtilisateur()));
    			}
    Et ce que je fais maintenant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:selectOneMenu id="selectTypeId" styleClass="sansBord" value="#{mess.typeUtilisateur}" converter="javax.faces.TypeUtilisateur">
    	    					<f:selectItems value="#{messageBean.tousLesTypesUtilisateurs}"/>
    	    				</h:selectOneMenu>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    List<TypeUtilisateur> l = MessageDelegate.getAllTypeUtilisateurs();
    			this.tousLesTypesUtilisateurs = new ArrayList<SelectItem>();
    			for(TypeUtilisateur t : l){
    				this.tousLesTypesUtilisateurs.add(new SelectItem(t,t.getLibelleTypeUtilisateur()));
    			}
    J'ai donc du créer un convertisseur et le déclarer dans le fece-config.xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <converter>
      <converter-id>javax.faces.TypeUtilisateur</converter-id>
      <converter-class>convertisseur.TypeUtilisateurConverter</converter-class>
     </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
    public class TypeUtilisateurConverter implements javax.faces.convert.Converter {
     
    	/* (non-Javadoc)
    	 * @see javax.faces.convert.Converter#getAsObject(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.String)
    	 */
    	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
    		System.out.println("getAsObject " + arg2);
    		TypeUtilisateur t = new TypeUtilisateur();
    		String[] params = arg2.split("@");
    		t.setIdTypeUtilisateur(Long.parseLong(params[0]));
    		t.setLibelleTypeUtilisateur(params[1]);
    		return t;
    	}
     
    	/* (non-Javadoc)
    	 * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
    	 */
    	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
    		System.out.println("getAsString " + arg2);
    		if(arg2 instanceof String){
    			return (String) arg2;
    		}else{
    			return ((TypeUtilisateur)arg2).toString();
    		}
    	}
     
    }
    Et ne pas oublier de redéfinir les méthodes HashCode et Equals de votre objet métier (perso seulement sur l'ID):

    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
    @Override
    	public int hashCode() {
    		final int prime = 31;
    		int result = 1;
    		result = prime
    				* result
    				+ ((idTypeUtilisateur == null) ? 0 : idTypeUtilisateur
    						.hashCode());
    		return result;
    	}
     
    	@Override
    	public boolean equals(Object obj) {
    		if (this == obj)
    			return true;
    		if (obj == null)
    			return false;
    		if (getClass() != obj.getClass())
    			return false;
    		final TypeUtilisateur other = (TypeUtilisateur) obj;
    		if (idTypeUtilisateur == null) {
    			if (other.idTypeUtilisateur != null)
    				return false;
    		} else if (!idTypeUtilisateur.equals(other.idTypeUtilisateur))
    			return false;
    		return true;
    	}

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/02/2012, 22h14
  2. SelectOneMenu dans un dataTable
    Par amarmama dans le forum JSF
    Réponses: 4
    Dernier message: 25/04/2008, 19h41
  3. Réponses: 3
    Dernier message: 29/12/2006, 16h11
  4. panelTab dans dataTable
    Par Alec6 dans le forum JSF
    Réponses: 4
    Dernier message: 30/11/2006, 18h59
  5. Réponses: 2
    Dernier message: 07/07/2005, 11h47

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