JSF Converter Problem in SelectOneMenu [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Einstellungswert für Konvertierungsfehler für 'Null-Konverter' - Warum benötige ich einen Konverter in JSF? 2 Antworten

ein weiteres Mal bin ich hier in Schwierigkeiten. Mein Punkt ist: In meinem Projekt brauche ich einen Konverter, um (offensichtlich) die Elemente aus der SelectOneMenu-Komponente in eine List-Eigenschaft in der jeweiligen Bean zu konvertieren. Auf meiner jsf Seite habe ich:

<p:selectOneMenu id="ddlPublicType" value="#{publicBean.selectedPublicType}"    effect="fade" converter="#{publicBean.conversor}" > 
    <f:selectItems value="#{publicoBean.lstPublicTypes}" var="pt" itemLabel="#{pt.label}" itemValue="#{pt.value}"></f:selectItems>
</p:selectOneMenu>

Und meine Bohne ist:

@ManagedBean(name = "publicBean")
@RequestScoped
public class PublicBean {

// Campos
private String name; // Nome do evento
private TdPublicType selectedPublicType = null;
private List<SelectItem> lstPublicTypes = null;
private static PublicTypeDAO publicTypeDao; // DAO 

static {
    publicTypeDao = new PublicTypeDAO();
}
// Construtor

public PublicoBean() {

    lstPublicTypes = new ArrayList<SelectItem>();
    List<TdPublicType> lst = publicTypeDao.consultarTodos();
    ListIterator<TdPublicType> i = lst.listIterator();
    lst.add(new SelectItem("-1","Select..."));
    while (i.hasNext()) {
        TdPublicType actual = (TdPublicType) i.next();
        lstPublicTypes.add(new SelectItem(actual.getIdPublicType(), actual.getNamePublicType()));
    }

}

// Getters e Setters

...

public Converter getConversor() {
    return new Converter() {
        @Override
        public Object getAsObject(FacesContext context, UIComponent component, String value) {
            // This value parameter seems to be the value i had passed into SelectItem constructor
            TdPublicType publicType = null; // Retrieving the PublicType from Database based on ID in value parameter
            try {
                if (value.compareTo("-1") == 0 || value == null) {
                    return null;
                }
                publicType = publicTypeDao.findById(Integer.parseInt(value));
            } catch (Exception e) {
                FacesMessage msg = new FacesMessage("Error in data conversion.");
                msg.setSeverity(FacesMessage.SEVERITY_ERROR);
                FacesContext.getCurrentInstance().addMessage("info", msg);
            }
            return publicType;
        }

        @Override
        public String getAsString(FacesContext context, UIComponent component, Object value) {
            return value.toString(); // The value parameter is a TdPublicType object ?
        }
    };
}

...
}

In demgetAsObject () Methode, der Wert-Parameter scheint der Wert zu sein, den ich in SelectItem Konstruktor übergeben hatte. Aber in dergetAsString () Methode scheint der Wert auch eine Zeichenfolgendarstellung einer ID zu sein. Dieser Parameter sollte nicht vom Typ TdPublicType sein. Ist irgendetwas in meinem Code nicht in Ordnung?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage