Ecco il mio SelectOneMenuselectonemenu JSF su oggetti con convertitore
<h:selectOneMenu value="#{bean.myObject}" >
<f:ajax render="componentToRender" listener="#{bean.onSelect}"/>
<f:converter converterId="myObjectConverter" />
<f:selectItem itemLabel="None" itemValue="#{null}" />
<f:selectItems value="#{bean.objects}" var="object" itemValue="#{object}" itemLabel="#{object.name}" />
</h:selectOneMenu>
E il mio convertitore
@FacesConverter("myObjectConverter")
public class MyObjectConverter implements Converter{
private List<MyObject> objects;
public MyObjectConverter(){
this.objects = MyController.getAllMyObjects();
}
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if(!StringUtils.isInteger(value)) {
return null;
}
return this.getMyObject(value);
}
public String getAsString(FacesContext context, UIComponent component, Object value) {
if(value == null) {
return null;
}
return String.valueOf(((MyObject) value).getId()).toString();
}
public MyObject getMyObject(String id) {
Iterator<MyObject > iterator = this.objects.iterator();
while(iterator.hasNext()) {
MyObject object = iterator.next();
if(object.getId() == Integer.valueOf(id).intValue()) {
return object;
}
}
return null;
}
}
Il problema è che il mio ascoltatore Ajax non viene mai chiamato e la mia componente mai reso. C'è qualcosa di sbagliato nel mio convertitore o selectOneMenu? Seguo un esempio e non riesco a capire l'errore.
BTW: il mio metodo semplice nel fagiolo
public void onSelect() {
System.out.println(this.myObject);
if(this.myObject != null) {
System.out.println(this.myObject.getName());
}
}
ho già avuto un problema come questo e ho cambiato il mio valore selezionato da oggetto a id. Ma qui voglio farlo funzionare con gli oggetti perché so che è possibile.
Grazie
Si prega di aggiungere '' o '' e includere il suo ID in '' pure. La probabilità è grande che avrai finalmente il messaggio di errore di conversione desiderato. Oppure, cerca nei log del server i messaggi di messaggi nascosti ma non visualizzati. O forse c'è anche un'eccezione concreta là che dovrebbe già essere l'intera risposta a sé stante, come 'NullPointerException', che indica un problema logico Java piuttosto banale. –
BalusC
Posso aggiungere che sta entrando nel metodo listener quando seleziono la voce "none" nell'elenco. –
Sì, hai ragione, ho un errore di convalida (il valore non è corretto). Significa che è il mio convertitore? È un convertitore molto semplice che ho pensato. –