2012-06-22 18 views
5

私はprimefaces 3.3.1とJSF 2(Mojarra 2.1.9)を使用しています。PrimeFacesダイアログを動的に作成する

私は、DataTableコンポーネントの詳細とDataTableエントリの詳細を表示するためのダイアログを持つページを持っています。私は1つのダイアログを持っているととても簡単です。私が欲しいのは、ユーザーが同じエントリーの詳細を持つ2つか3つのデイログを同時に開くことができるようにすることです。ダイアログの内容だけでなく、サーバーからAJAXを使って全体のダイアログを取得する方法を誰かが知っていますか?

+0

重複したhttp://stackoverflow.com/questions/8682277/how-to-programmatically-add-dialogs-with-primefaces – rags

+1

私はすでにその質問を見ましたが、私の問題は少し異なります。主な違いは、ユーザーが同時に複数のダイアログを開くことができるようにするため、ダイアログボックスをページ上にハードコーディングできないことです。テーブル内のすべてのエントリに対して1つのダイアログしか持たないのは、ネットワークのオーバーヘッドのためにうまくいかず、レイジーロードされたテーブルにとっても不可能です。 – partlov

+0

解決策を見つけましたか? – atamanroman

答えて

6

はい私はしました。この目的のために、私はBeanをバッキングするのに必要なダイアログをプログラムで作成しました。私はこれが本当にベストプラクティスではないことを知っていますが、現時点ではこれは唯一可能な解決策だと私は考えていますまず、JSFページにダイアログのコンテナであるグループパネルを1つ追加しました。

UIComponent panelGroup = facesContext.getViewRoot().findComponent("panel_id"); 
Dialog dialog = new Dialog(); 
dialog.setHeader("Sample"); 
dialog.setVisible(true); 
dialog.setMinimizable(true); 
... 
panelGroup.getChildren().add(dialog); 
... 
RequestContext requestContext = RequestContext.getCurrentInstance(); 
requestContext.update("panel_id"); 
3

ダイアログIDは動的であるため、IDやその他の値を作成して渡すこともできます。

<p:dialog header="Choose Delimiter Type" id="dialog" 
    widgetVar="exportDialog#{p.Id}" resizable="false" > 

ボタンを使用して呼び出します。

0

あなたのコード@newuseruaページのロード

... 
requestContext.update("panel_id"); 

は、上記の行は、そのすべてのさわやかな完全なパネルを更新したときにwidgetVar値は一度しかsettedされて動作していない。そして、Beanをバックに私はこのようないくつかのコードを持っています既存のダイアログとその内容

関連する問題