Bonjour,

mon problème du jour m'a surpris car il concerne quelque chose sur lequel je ne m'attendais pas à éprouver de difficulté.

Il s'agit pour moi d'agir sur le contenu d'une page en fonction du choix sur un menu déroulant.

J'ai donc un :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<h:selectOneMenu 	        		
  value="#{myBean.currentItem}"
  required="true" 
  onchange="this.form.submit();"
  valueChangeListener="#{myBean.itemChangeListener}">
  <f:selectItems value="#{myBean.allItems}"/>
</h:selectOneMenu>
et les valeurs/actions mappées dans le bean sont :
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
List<SelectItem> 			allItems;
SelectItem					currentItem;
 
@PostConstruct
public void initProfileBean() {
 
	List <MonObjet> tousMesObjets = monService.getAllObjets();
	allItems = new ArrayList<SelectItem>();
	for (MonObjet workObjet : tousMesObjets )
	{
		allItems .add(new SelectItem( workObjet.getId(),workObjet.getName() ));
	}
 
	currenItem 	= allItems.get(0);
}
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
public void itemChangeListener(ValueChangeEvent value)
{
	if(value!=null)
	{
		// diverses mises à jour de valeur en fonction de la valeur choisie
	}	
}
Seulement... lorsque je fais ça, au moment du changement de valeur, ma console me signale l'erreur suivante :
sourceId=myForm:j_id82[severity=(ERROR 2), summary=(Erreur de conversion quand la valeur '2' est commise pour le modéle 'null Converter'.), detail=(Erreur de conversion quand la valeur '2' est commise pour le modéle 'null Converter'.)]


A première vue, il semble nécessaire d'ajouter un <f:converter>... mais ça me semblait surprenant car j'avais cru comprendre que ce n'était nécessaire que pour des types non primitifs (hors là, mon id est un "int" et mon nom un "String"). Au cas où, j'ai tenté de faire du "tout string" en rajoutant ceci lors de la construction de ma table d'items:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
allItems .add(new SelectItem( Integer.toString(workObjet.getId()),workObjet.getName() ));
Mais ça n'a pas mieux marché..

J'ai donc tenté d'écrite un converter... mais là, je nage en terrain relativement inconnu (malgré les éléments de la FàQ). Spécialement, j'avais l'impression de refaire de façon plus compliquée ma 2ème solution:
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
public class IdConverter implements Converter {
 
	public Object getAsObject(FacesContext context, UIComponent component,
			String value) {
		// TODO Auto-generated method stub
		return null;
	}
 
	public String getAsString(FacesContext context, UIComponent component,
			Object value) {
		Integer id = (Integer) value;
		return Integer.toString(id);
	}
 
}
Mais tout ce que j'obtiens, c'est une nouvelle erreur :
sourceId=form_offer:j_id82[severity=(ERROR 2), summary=(form_offer:j_id82: valeur requise.), detail=(form_offer:j_id82: valeur requise.)]


En bref.. je suis un peu coincé.. donc si quelqu'un a une piste pour résoudre ce problème, vous ferez un heureux!

Et d'ici là, merci déjà de m'avoir lu.