2012-06-22 97 views
5

我正在使用primefaces 3.3.1和JSF 2(Mojarra 2.1.9)。動態創建PrimeFaces對話框

我有一個包含DataTable組件和Dialog的頁面來顯示DataTable條目的詳細信息。當我有一個對話框時,這非常簡單。我想要的是試圖讓用戶在同一時間打開兩個或三個不同條目的細節。有人知道如何從服務器獲得與AJAX的完整對話,而不僅僅是對話內容嗎?

+0

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

+1

我已經看到了這個問題,但我的問題稍有不同。主要區別在於我想讓用戶同時打開更多對話框,所以我無法在頁面上對對話框進行硬編碼。唯一的可能性是對於表中的每個條目都有一個對話框,這是因爲網絡開銷而不好,並且也不可能用於懶加載表。 – partlov

+0

您是否找到解決方案? – atamanroman

回答

6

是的,我做到了。爲此,我在後臺bean中編程創建了必要的對話框。我知道這不是最好的做法,但在這一刻我認爲這是唯一可行的解​​決方案。首先,我在JSF頁面上添加了一個組對話框,它是對話框的容器。然後在後臺bean我有一些像這樣的代碼:

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

Dialog ID也可以是動態的,所以你可以創建一些id或其他值並給予他。

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

並通過按鈕調用;

<p:commandButton id="id" value="xxx" 
      actionListener="#{p.export2CSV}" ajax="false" 
      onclick="exportDialog#{p.tabId}.show()">     
     </p:commandButton> 
0

@newuserua您的代碼不工作widgetVar值設置好的只有一次在頁面加載

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

上述行更新完全面板的清爽所有現有的對話框及其內容。