Oto moja SelectOneMenuselectonemenu JSF na obiektach z konwerterem
<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>
A mój konwerter
@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;
}
}
Problemem jest to, że moja ajax słuchacz nigdy nie jest wywoływana i mój komponent nigdy renderowane. Czy coś jest nie tak z moim konwerterem lub selectOneMenu? Podążam za przykładem i nie mogę wymyślić błędu.
BTW: moja prosta metoda w fasoli
public void onSelect() {
System.out.println(this.myObject);
if(this.myObject != null) {
System.out.println(this.myObject.getName());
}
}
miałem już problem takiego i zmieniłem wybraną wartość od obiektu do id. Ale tutaj chcę, aby działało z obiektami, ponieważ wiem, że to możliwe.
Dzięki
proszę dodać '' lub '' i zawierać jego identyfikator w '', jak również. Szansa jest duża, że nareszcie otrzymasz wiadomość o pożądanym napędzie konwersji. Lub poszukaj w dziennikach serwera wiadomości z kolejnymi, ale niewyświetlanymi twarzami. A może jest tam nawet konkretny wyjątek, który powinien już być całą odpowiedzią na własną rękę, na przykład 'NullPointerException', który wskazuje na dość banalny problem logiki Java. –
BalusC
Mogę dodać, że wchodzi on do metody detektora, gdy wybieram pozycję "brak" na liście. –
Tak, masz rację, mam błąd sprawdzania poprawności (wartość jest niepoprawna). To znaczy, że to mój konwerter? To bardzo prosty konwerter, pomyślałem. –