2017-04-07 2 views
1

Ich habe ein Problem mit p: selectOneMenu von PrimeFaces in JSF. Ich habe viele Fragen über das gleiche Problem gelesen, aber nichts hat mir geholfen.Primefaces Validierungsfehler mit Konverter und funktioniert gleich

Wenn ich meine Komponente die gleiche Weise, die ich in meinem Projekt, wo immer zu tun pflegte eingerichtet, wenn ich versuche, einem der Gegenstände meiner selectOneMenu auszuwählen, dieser Fehler angezeigt:

Validation Error: Value is not valid

Viele Leute beheben Sie dies, indem Sie die Konverter Klasse oder equals() Methoden korrigieren, aber nichts schief in Minen.

Converter

@RequestScoped 
public class BaremeConverter implements Converter { 

    @EJB 
    private BaremeBean baremeBean; 

    @Override 
    public Object getAsObject(FacesContext fc, UIComponent uic, String value) { 
     if(value != null && value.trim().length() > 0) { 
      try { 
       return baremeBean.loadById(Integer.parseInt(value)); 
      } catch(NumberFormatException e) { 
       return null; 
      } 
     } 
     else { 
      return null; 
     } 
    } 

    @Override 
    public String getAsString(FacesContext fc, UIComponent uic, Object object) { 
     if(object != null) { 
      return String.valueOf(((Bareme) object).getId()); 
     } 
     else { 
      return null; 
     } 
    }  
} 

BaremeBean ist die EntityBean dieser Klasse, die Daten in Ordnung geladen ist. Mein Arbeitsbereich ist voll von Konvertern wie diesem, also außer wenn ich etwas in diesem hier vermisse, sollte es hier funktionieren.

equals() Methode der Klasse Bareme

@Override 
public boolean equals(Object object) { 
    if (!(object instanceof Bareme)) { 
     return false; 
    } 
    Bareme other = (Bareme) object; 
    return !((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))); 
} 

Dies ist die Methode equals() von Netbeans erzeugt und nichts sieht auch hier falsch.

Schließlich gebe ich Ihnen den Code der Komponente, die ich verwende, und dasselbe wie die vorherigen, der gleiche Code funktioniert für andere Klassen, die ich bekam.

<h:outputLabel for="forfaitBareme" value="Barème" /> 
<p:selectOneMenu id="forfaitBareme" class="print-w100p-lab" value="#{transportFacturationBean.forfait.bareme}" converter="#{baremeConverter}" > 
    <f:selectItem itemLabel="" itemValue="#{null}" /> 
    <f:selectItems value="#{transportFacturationBean.baremesForfait}" var="b" itemLabel="#{b.id}" itemValue="#{b}" /> 
    <p:ajax event="change" update=":centralPanel" process="@form" /> 
</p:selectOneMenu> 

transportFacturationBean.baremesForfait ist ein java.util.List, die wenige Bareme enthält.

Sie sollten wissen, dass der folgende Code mit einem anderen benutzerdefinierten Objekt meines Projekts funktioniert. Camion ist auf die gleiche Weise implementiert wie Bareme, ihre Konverter sind ähnlich, und ihre equals() -Methode sind beide diejenigen, die von Netbeans erzeugt werden.

<h:outputLabel for="forfaitCamion" value="Camion" /> 
<p:selectOneMenu id="forfaitCamion" class="print-w100p-lab" value="#{transportFacturationBean.forfait.camion}" converter="#{camionConverter}" > 
    <f:selectItem itemLabel="" itemValue="#{null}" /> 
    <f:selectItems value="#{transportFacturationBean.camions}" var="c" itemLabel="#{c.type}" itemValue="#{c}" /> 
    <p:ajax event="change" update=":centralPanel" process="@form" /> 
</p:selectOneMenu> 

Jede Hilfe wäre willkommen! Danke im Voraus !

+0

Das Duplikat http://stackoverflow.com/q/9069379 beschreibt eine dritte Ursache, die Sie nicht erwähnt haben. – BalusC

+0

@BalusC Wenn du davon sprichst, dass das ausgewählte Element nicht in den verfügbaren sein könnte, ist mein Element zuerst null und wie du sehen kannst, habe ich das f: selectItem mit Wert null hinzugefügt, was für mein Camion-Objekt funktioniert. Ich habe auch versucht, ein anderes Element in meiner Liste der verfügbaren in meinem ManagedBean auszuwählen, aber der Fehler ist immer noch hier. – rvz

+0

Uh, ich habe nicht über Null-Gegenstände gesprochen. Nur dass der Artikel, der ausgewählt wurde, nicht mehr in der Liste verfügbarer Artikel zu dem Zeitpunkt ist, an dem die Formularübermittlung tatsächlich verarbeitet wird. – BalusC

Antwort

1

Gelöst! Der größte kleinste Fehler, den ich mir vorstellen könnte!

return baremeBean.loadById(Integer.parseInt(value)); 

Mein loadById Methode eine Liste anstelle einer einfachen Objekt .... Sorry, Jungs kamen zurück!

Verwandte Themen