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 Antwortenein 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?