richfaces datatable-クライアント側のデータテーブル全体をレンダリングせずに新しい行を追加する

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

質問

新しい行は、コマンドボタンまたはコマンドリンクのアクションイベントで関連するサーバー側のコレクションに追加でき、新しく追加された行をクライアントに表示できます テーブル全体が再レンダリングされている場合.

クライアント側に新しく追加された行を表示することは可能ですか データテーブル全体を更新する必要なく, 、を使用します 部分レンダリング, 、の助けを借りて ajaxkeys か何か ?

助けてくれてありがとう:)

役に立ちましたか?

解決

新しい行を追加する場合は、データテーブル全体を返信する必要があります。 Ajaxkeysは、既存の列を返信したい場合に役立つ場合があります。

他のヒント

また、あなたの質問に対する答えを知りたいと思っています。従来のJavaScriptを使用してそれを達成することができますが、Rich:Datatableを使用すると、クライアントに新しい行を追加できません。

しかし、私はそれをサーバー関数にajax呼び出しを使用して行いました。この関数は、新しい空の行をデータテーブルリストに追加し、rich:datatableを再度レンダリングします。

私のXHTMLページ

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

そして、老化した豆で

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);
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top