2017-12-26 7 views
0

Ich benutze STS (Spring tool suite) mit Spring Boot, Primefaces und Winterschlaf.p: selectOneMenu in p: Panel laden nicht korrekt nach speichern

Ich habe eine Seite mit einem p: Datentabelle. In der letzten Spalte haben Sie einen p: -Befehl zum Bearbeiten der Daten der Tabelle (p: dialog). Wenn ich den Dialog öffne, werden alle Daten korrekt geladen. Wenn ich den Dialog ohne Speichern schließe und andere Zeile der Tabelle öffne, laden Sie die Daten wieder korrekt, aber wenn ich die Daten speichere und einen neuen Dialog einer anderen Zeile der Tabelle öffne, wird das Feld p: selectOneMenu mit falschen Daten geladen. Ihr Wert ist der gleiche Wert wie der zuletzt gespeicherte Dialog. Alle Dialogdaten sind korrekt, abzüglich der Combobox (p: selectOneMenu). In Debug ist der Wert, der in Backing Bean zurückgegeben wird, korrekt.

Einige Dinge, die ich habe versucht:

  • Changed p: Command p: command;
  • In der Schaltfläche "Speichern" des Dialogfelds, "Update" -Feld mit dem p: Panel der Tabelle, das h: form, h: datierbar;
  • Änderung onComplete zu onClick;
  • Verwenden Sie h: selectOneMenu anstelle von p: selectOneMenu;
  • Herabstufen von Primzahlen (derzeit 6.1) und MyFaces (derzeit 2.2.12).

Alles kein Erfolg.

ps: Die Datentabelle wird gefiltert und paginiert.

xhtml:

<p:panel id="pnlData" header="My Table"> 
    <h:form id="frmTable"> 
     <p:dataTable var="item" value="#{RSDMBean.myData}" 
       id="tblTicketsID" widgetVar="tabelaTickets" some things of pagination and filters here...> 

       <p:column /> 
       <p:column /> ... 

      <p:column headerText="Edit"> 
        <p:commandButton value="Edit" 
         actionListener="#{RSDMBean.editTicketLoad(item.idTicket)}" 
         update=":formPnl:pnlTkct" oncomplete="PF('dlgtkt').show();"> 
        </p:commandButton> 
      </p:column> 
    </p:datatable> 
    </h:form 
</p:panel> 

<p:dialog id="dlgtktID" header="Edit ticket" widgetVar="dlgtkt" 
     modal="true"> 
     <h:form id="formPnl"> 
<h:panelGrid id="pnlTkct" columns="2" cellpadding="10" 
       cellspacing="1" style="absolute"> 

       <h:outputText style="font-weight:bold" value="Id Ticket: " /> 
       <h:outputText value="#{RSDMBean.ticketEdited.id}" /> 

     Others fields here... 

<h:outputText style="font-weight:bold" value="County: " /> 
       <p:selectOneMenu style="min-width: 162px;" required="true"> 
        <f:selectItem itemLabel="#{RSDMBean.ticketEdited.county.name}" 
         itemValue="#{RSDMBean.ticketEdited.county.id}" /> 
        <f:selectItems 
         value="#{RSDMBean.countyItensedit.entrySet()}" var="entry" 
         itemValue="#{entry.key}" itemLabel="#{entry.value}" /> 
       </p:selectOneMenu> 

       <p:commandButton value="Save" action="#{RSDMBean.saveEdit}" 
        update=":frmTable:tblTicketsID" oncomplete="PF('dlgtkt').hide();" /> 
end tags here... 

Bean:

import javax.annotation.PostConstruct; 
import javax.faces.bean.RequestScoped; 
import org.springframework.beans.factory.annotation.Autowired; 
. 
. 
. 

@Controller("RSDMBean") 
@RequestScoped 
public class MyMBean implements Serializable { 
@Autowired 
private ResiduoService residuoService; 
@Autowired 
private ResiduoRepository residuoRepository; 
@Autowired 
private CountyRepository countyRepository; 

private Residuo ticketEdited; 

private List<County> county; 

private Map<Long, String> countyItensEdit = new HashMap<Long, String>(); 


public void editTicketLoad(String param) { 
    long idTicket = Long.parseLong(param); 
    ticketEdited = residuoRepository.findOne(idTicket); 
    county = countyRepository.findAll(); 
} 

@PostConstruct 
public void construct() { 
//some loads database here... 
    county = countyRepository.findAll(); 

    if (countyItensEdit.isEmpty()) { 
     for (Municipio c : countyItensEdit) { 

      countyItensEdit.put(c.getId(), c.getNome()); 
     } 
    } 
} 
+0

Sie verwenden falsche Werte in der Update-Attribute. Führen Sie Ihre App im Entwicklungsmodus aus und lesen Sie auch https://stackoverflow.com/questions/8634156/how-to-find-out-client-id-of-component-for-ajax-update-render-cannot-find-compo – Kukeltje

+0

Die "Update" -Attribute wurden aktualisiert, z. B. Ihr Link und die Frage. Aber nicht funktioniert. – vctlzac

Antwort

0

In p: selectOneMenu fehlte Wert tag:

<p:selectOneMenu style="min-width: 162px;" required="true" 
        value="#{RSDMBean.ticketEdited.county.id}"> 
+0

Für nächste Fragen erstellen Sie bitte ein [mcve]. Viel einfacher, Ursachen wie diese dann zu finden ... es hatte effektiv nichts mit dem Panel und allen – Kukeltje

+0

Okay zu tun. Ich werde es beim nächsten Mal überlegen. Vielen Dank. – vctlzac

Verwandte Themen