Converter für SelectOneMenu

mario87b

Aktives Mitglied
Hallo.

Ich habe bereits einmal für eine Primefaces Picklist einen Converter geschrieben. Heute stelle ich fest, das sich der Converter für eine Faces SelectOneMenu Kompenente nicht so funktioniert.

Code:
<h:outputText value="Kategorie wählen:" ></h:outputText>
                        <h:selectOneMenu label="Kategorie" value="#{formsBean.selectedCategoryItem}" converter="SelectOneMenuConverter" >
                            <f:selectItem itemLabel="Kategorie zuordnen" itemValue="#{0}" />
                            <f:selectItems value="#{formsBean.selectCategoryItems}" />
                        </h:selectOneMenu>

Der Converter wird aufgerufen, da passt alles.
Mein Problem ist die getAsObject Methode. In den Kommentaren steht noch der Code für die Picklist.
Wenn ich nun aus der UIComponente die Objekte der SelectOneMenu Elements holen möchte, bekomme ich nur null?

Code:
Object oneselect = ( (HtmlSelectOneMenu) component ).getValue();

Code:
@Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        
        
        
      //  Object ret = null;
        //  if (component instanceof PickList) {
        //      Object dualList = ( (PickList) component ).getValue();
        //      if (dualList == null) throw new UnsupportedOperationException("Fehler im PickList Converter.");
        //       DualListModel dl = (DualListModel) dualList;
        //       for (Object o : dl.getSource()) {
        //          String persnr = "" + ( (View_get_all_users_of_share) o).getPersnr();
        // ist der aktuelle wert value in der teilmenge der source seite?
        //            if (value.equals(persnr)) {
        //                ret = o;
        //                break;
        //            }
        //       }
        //        if (ret == null) {
        //            for (Object o : dl.getTarget()) {
        //                String persnr = "" + ( (View_get_all_users_of_share) o).getPersnr();
        // ist der aktuelle wert value in der teilmenge der target seite?
        //                if (value.equals(persnr)) {
        //                    ret = o;
        //                break;
        //                }
        //            }
        //        }
        //    }
       //  return ret;
        
    }


Ich weiß nicht weiter?!
 
Hallo Mario,

1) hole dir die formsBean aus dem entsprechendem Scope Context.
2) dort iterierst du deine Liste und vergleichst den String Value aus dem getAsObject Funktionsparameter mit den Wert des aktuell iteriertem Objektes.
3) wurde das Objekt gefunden, gibst du es zurück, ansonsten null.

Alternativ kannst du auch in der Datenbank danach suchen lassen.



Java:
FacesContext context = FacesContext.getCurrentInstance();		 
FormsBean FB = (FormsBean) context.getELContext().getELResolver().getValue(context.getELContext(), null,"formsBean");

if(FB != null) {
for(myObject obj : formsBean.selectCategoryItems) {
    if(obj.id == Integer / Long .parsexxx(value)
    return obj;
}
}

return null;
 
DANKE!

Genau so hab ich mir das vorgestellt... Klasse!

Habs jetzt so gemacht.
Code:
public Object getAsObject(FacesContext context, UIComponent component, String value) {

FormsBean fb = (FormsBean)context.getELContext().getELResolver().getValue(context.getELContext(), null,"formsBean");

Objext ret = null;

for (Category c : fb.getSelectCategoryItems()) {
    if ( Integer.parseInt(value) == c.getIdCategory ) {
       ret = c;
       break;
       }
}
return ret;

}
 

Zurück
Oben