2012-01-25 8 views
2

これは私のシナリオです。私は、行を削除するために使用されるボタンを持つ列を持つクライアントでデータテーブルを作成しました。ボタンをクリックすると、confirmDialogが表示されます。このconfirmDialogには、バッキングBean上のクライアントの名前にバインドされた「message」属性があります。プライムフェイスのconfirmDialogを更新します

は、私が選択した行の名前でconfirmDialogを更新するために、2つのアプローチを試してみた:

  1. 私はそれがconfirmDialogを更新した行を選択すると、これに伴う問題は時々時間が更新するということですが大きければ、削除ボタンをクリックするのにかかる時間は、confirmDialogが既に開かれているときにのみ更新が行われ、開いたダイアログを更新すると、プリミクスにバグがあります。

  2. 削除ボタンをクリックした後でconfirmDialogを更新すると、ボタンをクリックする前にその行を選択しても動作しますが、ボタンを直接クリックして行を選択せず​​に前の選択された行を使用します。

誰でもこれを達成するための別の戦略を考えることができますか?

私が考えてきたことの1つは、行が選択されたときに削除ボタンを表示することです。その方法では2番目の方法が有効です。しかし、私はこれをどうやって行うのか分かりません。

答えて

1

私がこれを行う方法は、編集や削除を2ステップで行うことです。誰かが削除ボタンをクリックすると、どの行から来たのか正確に分かり、その情報を保存します。ダイアログでは、deleteメソッドを呼び出して、以前に保存したオブジェクトを削除するだけです。

私はあなたに車の短い例を教えてあげましょう。まず、あなたのテーブルで、現在選択されているObjectを "currentCar"に保存するメソッドを呼び出します。もちろんダイアログを開きます。

あなたは単にメソッド public void deleteCar()を呼び出し、削除するために「currentCar」を必要とする、あなたのダイアログで
<p:commandButton icon="ui-icon ui-icon-close" 
    action="#{carBean.prepareRemoveCar(var)}" 
    oncomplete="dlg_confirmDeleteCar.show();" /> 

public class CarBean implements Serializable { 
    ... 
    private Car currentCar; 
    ... 
    public void prepareDeleteCar(Car currentSelectedCar){ 
     currentCar = currentSelectedCar; 
    } 

    public void deleteCar(){ 
     //delete currentCar 
    } 
    ... 
} 

あなたは、このアプローチに従った場合は、テーブル内の現在選択されている行は、のために重要ではありません。削除。任意の削除ボタンをクリックすることができ、選択に関係なく、その行/オブジェクトは常に削除されます。

他のケースでももちろん使用できます。インスタンスの更新、または新しいインスタンスの作成(この場合、 "prepareMethod"を使用してcurrentCar=new Car();を設定できます)

関連する問題