2010-12-29 13 views
2

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

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

感謝:)

答えて

1

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

+0

におけるmy xhtmlのpage。行を追加/削除するには、テーブル全体を再レンダリングする必要があります。 –

0

私は非常にあなたの質問の答えを知っている興味があります 私は伝統的なJavascriptを使用して達成することができますが、私はリッチを使用する:datatable私はクライアント上の新しい行を追加することはできません。

しかし、サーバー関数の呼び出しでajaxを使用しました。この関数は、新しい空の行をdataTableリストに追加し、rich:datatableを再度レンダリングします。

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

及びcorrect's maneged bean

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); 
    } 
関連する問題