RichFaces DataTable - Hinzufügen einer neuen Zeile, ohne die gesamte Datentabelle auf der Clientseite auszusetzen

StackOverflow https://stackoverflow.com/questions/4552491

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 :)

War es hilfreich?

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);
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top