2016-11-09 4 views
0
<h:form> 

    <h:panelGrid columns="2" style="margin-bottom:10px" cellpadding="5"> 
    <p:outputLabel for="providerSelect" value="Provider:" /> 
    <p:selectOneMenu id="providerSelect" value="#{programsController.provider}" style="width:125px"> 
     <p:ajax event="change" listener="#{programsController.providerSelected}" update="programsTable" /> 
     <f:selectItem itemLabel="Select Provider" itemValue="" /> 
     <f:selectItems value="#{providersController.providers}" var="provider" itemLabel="#{provider.name} (#{provider.uri})" /> 
     <f:converter binding="#{providerConverter}"/> 
    </p:selectOneMenu> 
    </h:panelGrid> 

</h:form> 

programsController.setProvider wird nicht aufgerufen.Wie kann ich p: selectOneMenu Updates Bean?

Die getAsObject des Konverters wurde dreimal für den Eigenschaftswert und zweimal mit der leeren Zeichenfolge ausgeführt.

Antwort

1

Update2: Ihr Konverter erhält jetzt auch die leere Zeichenfolge des einzelnen selectItem.

Sie können diesen Teil Ihrer Konverter getAsObject Methode hinzufügen:

if(value.length() == 0) return null; 

Sie müssen auch ein Verfahren in der Objektklasse, um zu überprüfen, ob es richtig ist. Hier ein Beispiel: Ersetzen Sie getId() durch die eindeutige Kennung Ihrer Provider-Objekte.

//for converter check if the object is valid 
public boolean equals(Object o){ 

if (o == this) return true; 
    if(o instanceof Provider) { 
     if(
      this.getId() == ((Provider)o).getId()){ 
       return true; 
      }else{ 
       return false; 
      } 

    }else{ 
     return false; 
    } 
} 

Update: Dieser Teil nicht korrekt ist mehr, weil die Frage

Ihr Ajax-Ereignis nicht verarbeitet den Wert aktualisiert wurde, nur die Komponenten aktualisieren.

Fügen Sie einfach process = „@ dieser“ das Ajax-Ereignis, dann wird es den Wert auf die Bohne verarbeiten:

<p:ajax event="change" update="@this programsTable" process="@this"/> 
+0

Sie Ihre Bohne, Konverter und die Provider-Klasse, wenn der Konverter ist das Problem bieten sollen jetzt. – lastresort

Verwandte Themen