2

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

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

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

4

2 に答える 2

1

新しい行を追加する場合は、データテーブル全体を再レンダリングする必要があります。AjaxKeys は、既存の列を再レンダリングする場合に役立ちます。

于 2010-12-29T08:20:41.570 に答える
0

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

しかし、サーバー関数への ajax 呼び出しを使用してそれを行いました。この関数は新しい空の行を dataTable リストに追加し、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);
    }
于 2012-01-09T20:09:11.797 に答える