2013-10-30 86 views
19

您好我有一些功能的基礎上,該功能有一定條件的託管bean我喜歡叫一個對話框調用Primefaces對話框

Managed Bean的功能都按

public String editStudent(){  
    setReadOnly(false);  
    setButton(true, true, true, false, true, true,true); 
    LockItem lItem; 
    if(selectStudent !=null){ 
     lItem = (LockItem) services.getbyId("LockItem", condition); 
     if (lItem == null){ 
      System.out.println("Student Avalibale for process :::"); 
      studentRedirect(); 
      return "studentEdit.jsf?faces-redirect=true"; 
     } else { 
      //To show dialog from here 
      System.out.println("Student Not Avalibale : Locked By " + lItem.getLockedBy()); 
     } 
    } else { 
     FacesMessage msg; 
     msg = new FacesMessage("Please select the record."); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
     return show("menu"); 
    } 
} 

是否有任何方法可以使用我們可以從這種管理功能調用對話框

回答

61

您可以通過使用RequestContext類。

假設你有以下幾點:

<p:dialog id="myDialogID" widgetVar="myDialogVar"> 
.... 
</p:dialog> 

所以你在的facelet本身,即onclick=myDialogVar.show();做的方式,同樣可以在託管bean做像這樣:

對於Primefaces < = 3.X

RequestContext context = RequestContext.getCurrentInstance(); 
context.execute("myDialogVar.show();"); 

對於Primefaces> = 4.x的(按照@dognose和@Sujan)

RequestContext context = RequestContext.getCurrentInstance(); 
context.execute("PF('myDialogVar').show();") 

這是使用靶向的對話框。如果你只需要顯示一條消息,沒有優先考慮任何自定義對話框,那麼你可以這樣來做:

FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Message Title", "Message body"); 
RequestContext.getCurrentInstance().showMessageInDialog(message); 

您可以傳遞參數,並設置回調也是如此。請參閱鏈接中的展示示例。

參見:

+0

我正在使用primefaces 3.5 ..它在那裏也可用...... – Nitin

+0

這個例子完全可以和pf 3.5一起工作 –

+0

也許你應該明白在'execute()'你必須引用widgetVar名字 – dasLort

8

如果你是primeface 4.0或以上:

RequestContext.getCurrentInstance().execute("PF('yourdialogid').show()"); 
+1

我正在與primefaces 3.5 ..它是否可用還有.... – Nitin

5

Vrushank的sollution是正確的。

還有另一種方法:在你的對話框,綁定渲染屬性的bean的布爾值,並設置可見屬性爲true,像這樣:

<p:confirmDialog 
     widgetVar="myDialog" 
     visible="true" 
     rendered="#{myBean.showMyDialog}"> 

在動作監聽器在你的bean,你只要請致電setShowMyDialog(true),並顯示對話框(假設您的對話正在通過此操作進行更新)。這種方法很有用,如果由於某種原因,當用戶看不到對話框的HTML時,就會出現這種情況。這樣,在你的bean中你可以訪問信息,無論你的對話是否可見。

此解決方案的另一個好處是,您的對話框不會隱藏在ajax更新(對話框或其父項)上。