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());
}
}
}
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
Die "Update" -Attribute wurden aktualisiert, z. B. Ihr Link und die Frage. Aber nicht funktioniert. – vctlzac