Wie ajax aktualisieren eines Elements in der Fußzeile von PrimeFaces dataTable?
Dies ist ein visual von der Tabelle habe ich:
+---------+------------+-------------------+ | Header1 | Header2 | Header3 | +---------+------------+-------------------+ Zeile | A | Input A | Calc ' ed Ausgang A | | Reihe B | Input B | Calc ' ed Ausgabe B | | usw ... | usw ... | usw.. | +---------+------------+-------------------+ | Total: Total calc ' ed Ausgang | +------------------------------------------+
Und der abgespeckte code:
<p:dataTable id="myTable" value="#{myBean.someList}"
var="currentItem">
<p:column headerText="Header1">
<h:outputText value="#{currentItem.name}" />
</p:column>
<p:column headerText="Header2">
<pe:inputNumber value="#{currentItem.inputVal}">
<p:ajax event="change" listener="#{myBean.changeListener}"
update="outputVal outputTotal" />
</pe:inputNumber>
</p:column>
<p:column headerText="Header3">
<h:outputText id="outputVal" value="#{currentItem.outputVal}" />
</p:column>
<f:facet name="footer">
Total:
<h:outputText id="outputTotal" value="#{myBean.total}" />
</f:facet>
</p:dataTable>
Den myBean.someList
ist ein ArrayList<SomeOtherBean>
mit einem String und zwei Integer-zahlen, mit nur Getter und setter. Die myBean.changeListener
berechnet die zweite Zahl aus der ersten für die angegebene Zeile, und auch die Summe für alle Zeilen.
So, wenn ich in einen der Eingänge, dann konzentrieren Sie sich, wird der listener aufgerufen und die Berechnung erfolgt, sondern auf dem Bildschirm, wird der Wert in der Dritten Spalte ändert, aber die Summe hartnäckig bleibt null. Ich bin mir ziemlich sicher, das hat etwas zu tun mit PrimeFaces anfügen der Zeile, index um die generierten id ' s für jeden Eingang und Ausgang, aber ich kann nicht herausfinden, wie man die Ausgabe in der Fußzeile (deren erzeugte id ist mainForm:myTable:0:outputTotal
).
Nun, ich könnte einfach aktualisieren Sie die übergeordnete Tabelle. Allerdings, wenn die Eingabe, die den Fokus erhält, ist Teil der update-Ziel, der Fokus geht verloren, und ich bin unter äußerst strengen Regeln, die den Zugang, dass diese Tabelle muss werden Tastatur und freundlich (geben Sie eine Zahl, Registerkarte, geben Sie eine Zahl, tab, etc...)
Habe ich versucht:
- update=":outputTotal" (gab-Ausnahme kann Nicht finden Komponente mit id...)
- update="myTable:0:outputTota (gleiche Ausnahme)
- update="myTable:outputTotal" (kein update, insgesamt bleibt null)
- wickeln Sie den text in eine panelGroup und update (kein update)
(PrimeFaces 3.5.0 mit MyFaces unbekannte version)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie wirklich nicht, aktualisieren Sie die Werte der Tabelle in die Tabelle. Allerdings können Sie mit
p:remoteCommand
um dies zu erreichen. Außerdem würde ich wahrscheinlich mit dem cellEdit-Ereignis auf die ganze Tabelle (anstelle eines einzelnenp:ajax
auf Ihrepe:inputNumber
). Das Gesamtergebnis wäre:Bitte beachten Sie, dass Sie brauchen könnte hinzufügen
partialSubmit="true"
zu denp:ajax
auf diese Weise Sie nur senden Sie die Komponente Daten. Wenn Sie wie die cellEdit-Ereignis-Idee, die Sie benötigen, um die Datentabelle Bearbeiten und fügen Sie die folgenden in Ihremp:dataTable
, und loszuwerden, diep:ajax
in Ihrempe:inputNumber
Glück!