RichFaces DataTable - Hinzufügen einer neuen Zeile, ohne die gesamte Datentabelle auf der Clientseite auszusetzen
-
13-10-2019 - |
Frage
Die neue Zeile kann zur zugehörigen serverseitigen Sammlung auf einem Aktionsereignis einer Befehlstaste oder eines Befehlslinks hinzugefügt werden, und die neu hinzugefügte Zeile kann auf dem Client angezeigt werden Wenn die gesamte Tabelle erneut gerendert wird.
Ist es möglich, die neu hinzugefügte Zeile auf der Clientseite anzuzeigen ohne das gesamte DataTable aktualisieren zu müssen, Verwendung der teilweise Rendering, mit der Hilfe von Ajaxkeys oder so ?
Danke im Voraus für jede Hilfe :)
Lösung
Sie müssen die gesamte Dataatable erneut ausführen, wenn Sie eine neue Zeile hinzufügen. Ajaxkeys können nützlich sein, wenn Sie vorhandene Spalten neu gründen möchten.
Andere Tipps
Ich bin sehr interessiert auch, eine Antwort auf Ihre Frage zu kennen. Ich kann das mit herkömmlichem JavaScript erreichen, aber wenn ich Rich: DataTable verwende, kann ich den Client keine neuen Zeilen hinzufügen.
Aber ich habe das mit AJAX -Aufrufen zu Serverfunktionen gemacht. Diese Funktion füge der DataTable -Liste eine neue leere Zeile hinzu und rendert die Rich: DataTable erneut.
Meine XHTML -Seite
<rich:column>
<f:facet name="header"><h:outputLabel value="#{msgs.notes}" style="font-size:15px;"/> </f:facet>
<h:inputText value="#{line.notes}" >
<a4j:ajax event="blur"
execute="datatable"
render="datatable"
immediate="true"
listener="#{saleBacking.addNewLineInDataTable}"
oncomplete="document.getElementById('myform:datatable:#{saleBacking.view_no_counter-1}:line').focus();"/>
</h:inputText>
</rich:column>
und in der geästenen Bohne
public void addNewLineInDataTable(AjaxBehaviorEvent event)
{
SaleLine saleLine = new SaleLine();
saleLine.setId(salesLineslist.isEmpty() ? 1 : salesLineslist.get(salesLineslist.size() - 1).getId() + 1);
salesLineslist.add(saleLine);
saleLine = new SaleLine();
saleLine = new SaleLine();
saleLine.setSaleId(sale);
saleLine.setViewNo(++view_no_counter);
saleLine.setDiscount(0d);
saleLine.setItemPrice(0d);
salesLines.add(saleLine);
}