2014-03-27 80 views
5

我試圖打開對話框使用Primefaces 4對話框架,Primefaces對話框架不工作時使用AJAX聽衆

public void openDialog(String viewName) { 
    RequestContext.getCurrentInstance().openDialog(viewName); 
} 

這工作:

<p:commandButton value="Click" action="#{impaktDialogBean.openDialog('/popup/test2')}"/> 

這不:

<p:commandButton value="Click">  
    <p:ajax event="click" listener="#{impaktDialogBean.openDialog('/popup/test2')}" ></p:ajax> 
</p:commandButton> 

所以,Primefaces對話框架只用行動& ActionListener的工作?????

我使用:

  • Primefaces 4
  • 的Tomcat 7
  • JSF 2.2.6鑽嘴魚科

感謝。

+0

號碼:的commandButton默認情況下,你要調用p爲什麼有AJAX = 「真」:AJAX,你有沒有試圖使AJAX = 「假」。 – user1433804

+1

是的,我知道,但如果我想在事件打開對話框,在其中操作不能像數據錶行被解僱選擇????? ... AJAX =虛假不工作。 –

回答

0

你有這樣的:

public void openDialog(String someView) { 
    RequestContext.getCurrentInstance().openDialog(someView); 
} 

所以,當你這樣做:

<h:form id="form"> 
    <p:commandButton id="button" value="Click" actionListener="#{bean.openDialog('someView')}" /> 
</h:form> 

你在你的Ajax響應收到這樣的:

PrimeFaces.openDialog({ 
    url:'/some/address/view.xhtml', 
    pfdlgcid:'cf8e7955-a6cf-4dd8-9a07-55cd29696a64', 
    sourceComponentId:'form:button', 
    sourceWidget:PF('widget_form_button'), 
    options:{}}); 

所以,你可以試試這個:

<h:form id="form"> 
    <p:commandButton id="button" value="Click" onclick="PrimeFaces.openDialog({ 
     url:'/some/address/view.xhtml', 
     pfdlgcid:'cf8e7955-a6cf-4dd8-9a07-55cd29696a64', 
     sourceComponentId:'form:button', 
     sourceWidget:PF('widget_form_button'), 
     options:{}});" /> 
</h:form> 

你甚至可以使用的返回值:

<h:form id="form"> 
    <p:growl id="growl" showDetail="true" /> 

    <p:commandButton id="button" value="Click" onclick="PrimeFaces.openDialog({ 
     url:'/some/address/view.xhtml', 
     pfdlgcid:'cf8e7955-a6cf-4dd8-9a07-55cd29696a64', 
     sourceComponentId:'form:button', 
     sourceWidget:PF('widget_form_button'), 
     options:{}});"> 

     <p:ajax event="dialogReturn" listener="#{bean.returnedValue}" update="growl" /> 
    </p:commandButton> 
</h:form> 

的AJAX只是對結果轉向目標網址。如果您已經擁有目標網址,則無需執行此操作。在我的基本測試中,這個效果很好,和原來的一樣,除了你必須在'url'字段中傳遞目標地址,而不是結果。

希望這有助於。

+0

是啊,它的工作原理,你可以把它放在'oncomplete' AJAX和ATTRIB對話框被炒魷魚。但是對'pfdlgcid'進行硬編碼是安全的?它的自然行爲似乎隨時隨地改變。 – daVe

0

我發現的最簡單的方法是通過JavaScript火起來的按鈕。

打開的對話框中(也許隱藏)按鈕:

<p:commandButton id="myButton" action="#{bean.openMyDialog}" style="display:none" /> 

阿賈克斯事件「點擊」按鈕:

<p:ajax ... oncomplete=" $('#myButton').click() " /> 
0

我知道有人問很久以前的事,但對於未來的時代......

怎麼樣一個<p:remoteCommand>

<p:remoteCommand name="remoteCmd" update="anything" actionListener="#{impaktDialogBean.openDialog('/popup/test2')}" /> 

<p:commandButton value="Click" update="anything" onclick="remoteCmd()" > 

不同的方法來實現對你的bean的javascript調用。