Wie aktualisiert Primefaces datatable jedes mal, wenn die Seite heruntergeladen wird?
Ich habe nur <p:dataTable/>
. Wenn ich eine neue Zeile an die Tabelle in einer anderen Seite, wird die Tabelle nicht aktualisiert. RmaBean ist managedBean Gültigkeitsbereich Sitzung. Irgendwelche Ideen?
<h:form id="mainMenuForm">
<p:dataTable id="dataTable"
var="case"
value="#{RmaBean.rmaModel}"
widgetVar="rmaTable"
editable="true"
rows="10" paginator="TRUE" emptyMessage="No items found with given criteria.">
...
<p:column></p:column>
<p:column></p:column>
<p:column><p:commandButton action="#{MainController.talletaUusiRma}" value="#{bundle.newRma_tallenna}" immediate="true" ajax="false" style="width: 220px;"/></p:column>
</p:row>
Wenn ich ein neues Objekt hinzuzufügen, um die Tabelle, die ich aktualisieren Sie einfach die rmaModel
jedes mal und ich selbst prüfen, ob die Liste ist eins mehr als vorher, und es gibt das neue Objekt. Die Datentabelle zeigt noch die alten Daten, ohne das neue Objekt, warum?
--------ERSTELLUNG DES NEUEN RMA-------------
public String prepareNewRma() {
current = new Rma();
current.setUser("");
return "newRma";
}
--------ABRUFEN VON DATEN AUF DEN NEUEN RMA-MIT SERIENNUMMER------
public String haeTiedotSarjanrolla() {
log.info("sarjanro=" + current.getSarjanro());
System.out.println("---------------->sarjanro=" + current.getSarjanro());
Sarjanumerot s = helper.getSerialInfo(current.getSarjanro());
if (s != null) {
current.setAn8(s.getAn8());
current.setDsc1(s.getDsc1());
current.setDsc2(s.getDsc2());
current.setSarjanro(s.getId().getLotn());
current.setTuotenro(s.getId().getLitm());
}
return "newRma";
}
--------SPEICHERN VON NEUEN RMA---------------
public String talletaUusiRma() {
current.setCreated(new Timestamp(System.currentTimeMillis()));
helper.tallennaRma(current);
rmaNumbers = null;
RmaBean papu = (RmaBean) JsfUtil.findBean("rmapapu");
papu.updateTable();
return "mainMenu";
}
HELFER:
public void tallennaRma(Rma current) {
try {
Session session = HibernateUtil.getAsekorjausSessionFactory().getCurrentSession();
session.beginTransaction();
session.saveOrUpdate(current);
session.getTransaction().commit();
} catch (Exception e) {
log.debug(e.getMessage());
JsfUtil.addErrorMessage(ResourceBundle.getBundle("resources/Bundle").getString("editRma_err_updateError"));
}
---------AKTUALISIEREN des MODELLS UND TABELLE in RmaBean-----------
public void updateTable(){
System.out.println("updateTableupdateTableupdateTable");
rmaModel.setWrappedData(rmaModel.getUpdatedList());
System.out.println("1111111..........");
List<Rma> rmat = rmaModel.getUpdatedList();
System.out.println("22222222.......");
Iterator iter = rmat.iterator();
System.out.println("------------------------>PITUUS: " +rmat.size());
while (iter.hasNext()) {
Rma t = (Rma) iter.next();
System.out.println("t.getRma()NUMERO------->" +t.getRma());
}
RmaDataModel newRMAModel = new RmaDataModel(rmat);
rmaModel = newRMAModel;
}
Sami
- könnte Sie erweitern Ihre Frage mit der Methode, die fügt ein neues element zu der Liste? Bitte korrigieren Sie die code-Stück oben, entweder poste den ganzen code der Methode oder einfach nur die Signatur der Methode und mark fehlender code-Stücke.
- Ist es jetzt ok? Ich war so müde, Letzte Nacht, dass ich versuchte schnell sein 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
value-Attribut der dataTable Sie ist im Gültigkeitsbereich einer session, so dass Ihre Datentabelle wird nur erbracht werden, auf Sie ersten Antrag in dieser Sitzung (wenn Sie nicht aktualisieren Sie diese Ansicht manuell).
Verwenden, Ansicht-scoped bean für Ihre Ansichten. Wenn es notwendig ist, dass diese Liste in der session-scope, nur injizieren Sie die Liste von jeder session-scoped bean nach Ihrer Ansicht scoped bean.
Wenn ich gut verstehe Ihr Problem, Sie wollen zur Aktualisierung einer Seite, wenn die Aktion fertig ist, in einem anderen Seite, ist das nicht automatisch gemacht mit der ajax-update. Es hat zu tun mit push. Sie haben ein paar Beispiele für von es in das primefaces-showcase:
http://www.primefaces.org/showcase/push/index.jsf
Aus dem ersten Beispiel:
bb
Machte ich eine echte bubblegum Lösung, denn ich konnte nicht passen Sie es anders. Ich Schreibe einfach bean wieder zu Sitzung, so geht es über den alten mit dem Namen "rmapapu". Nein, es ist Arbeit. Gibt es da irgendwelche Konsequenzen, oder ist das wirklich eine schlechte Idee?
Danke an alle die mir geholfen haben. Ich will immer noch Lesen BalusC tutorial darüber, weil es schön wäre, zu wissen, wie Sie das machen sollte 🙂
Sami