Bonjour à tous.
Je voudrais faire une liste déroulante dynamique dont les données proviennent de la table typeproduit qui est en relation avec la table produit dans la base de données(un produit appartient à un et un seul typeproduit et un typeproduit peut avoir un ou plusieurs produits) afin de m'en servir pour sélectionner un type du produit lors de l'enregistrement d'un produit.

Voilà le code de mon entité typeproduit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
@Entity
@Table(name = "TypeProduit")
public class TypeProduit_Entity{
 
	  @Id
	  @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long NumType;
	  @Column(name = "NomType")
	  @NotNull(message = "Veuillez saisir un type.")
	  @Size(min = 2,message = "Le nom d'un type doit avoir au moins 2 caractères.")
      private String nomType;
Voilà le code de mon entité produit :

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
 
@Entity
@Table(name = "produit")
public class Produit_Entity implements Serializable{
 
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "NumProduit")
	private Long numProduit;
	@Column(name = "NomProduit")
	private String nomProduit;
	@Column(name = "PrixUnitaire")
	private Long prixUnitaire;
 
/*.....................................................................................................................................................................................................*/
	@ManyToOne
	@JoinColumn(name = "NumType")
	private TypeProduit_Entity typeproduit;
Voilà mon ManagedBean du typeproduit dans lequel je construis mon SelectItem avec des données provenant de la table typeproduit :

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
 
@ManagedBean
public class TypeProduit_Managed implements Serializable {
 
	private static final long serialVersionUID = 1L;
	private List<TypeProduit_Entity> liste = new ArrayList<TypeProduit_Entity>();
	private TypeProduit_Entity typeProduit;
	private Map<Long,String> mapDesTypes = new HashMap<Long,String>();
	private SelectItem listeSelectItem;
        @EJB
	private TypeProduit_dao typeProduit_DAO;
 
 
       public TypeProduit_Managed(){
		typeProduit = new TypeProduit_Entity();
	}
 
	public TypeProduit_Entity getTypeProduit() {
		return typeProduit;
	}
 
       public List<TypeProduit_Entity> getListe() {
		return typeProduit_DAO.listeType();
	}
 
     public Map<Long,String> getMapDesTypes() {
		for(TypeProduit_Entity tpe : getListe()){
			mapDesTypes.put(tpe.getNumType(),tpe.getNomType());
		}
		return mapDesTypes;
	}
 
	public SelectItem getListeSelectItem() {
		return new SelectItem(getMapDesTypes());
	}
Voilà mon ManagedBean du produit :

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
 
@ManagedBean
public class Produit_Managed implements Serializable{
 
	private static final long serialVersionUID = 1L;
	private Produit_Entity produit;
	@EJB
	private Produit_dao produitDAO;
 
	public Produit_Entity getProduit() {
		return produit;
	}
 
	public Produit_Managed(){
		produit = new Produit_Entity();
	}
Et enfin voilà comment j'ai défini la liste déroulante dans le xhtml :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
<h:outputLabel for="type">Type du produit : <span class="requis">*</span></h:outputLabel>
<h:selectOneMenu id="type" maxlength="60" value = "#{produit_Managed.produit.typeproduit.numType}">
<f:selectItems value = "#{typeProduit_Managed.listeSelectItem}" />
<f:ajax event="blur" render="typeMessage" />
</h:selectOneMenu>
<h:message id="typeMessage" for="type" errorClass="erreur" />
Ci-dessous le rendu que j'ai :

Nom : Capture_Liste.PNG
Affichages : 889
Taille : 5,4 Ko

Comme vous pouvez le voir j'ai un affichage bizarre des données dans la liste déroulante et en plus si je place le curseur dans le champ suivant autrement dit,après la validation par le tag <f:ajax event="blur" render="typeMessage" />
j'ai cette erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Caused by: javax.el.PropertyNotFoundException: Target Unreachable, 'null' returned null
Si quelqu'un sait comment m'y prendre merci de m'orienter.

N.B : j'ai omis les getters et les setters des entités afin d'aérer le code.