2013-02-23 59 views
1

在用戶指南中指出,RequestContext可用於Ajax調用和非Ajax調用。但是,用戶指南中的所有示例都使用Ajax,在我的情況下,它不適用於非Ajax調用。PrimeFaces v3.5:在非Ajax調用中不使用RequestContext顯示對話框

下面是一個測試頁面:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:p="http://primefaces.org/ui"> 
    <h:head> 
     <title>Test page</title> 
    </h:head> 
    <h:body> 
     <h:form > 

      <p:commandButton ajax="false" value="Non-Ajax" actionListener="#{mrBean.show}" /> 

      <p:commandButton value="Ajax" actionListener="#{mrBean.show}" /> 

     </h:form> 

     <p:dialog modal="true" id="statusDialog" widgetVar="statusDlg" closable="false" > 
      <h:outputText value="Helllooo" /> 
     </p:dialog> 
    </h:body> 
</html> 

這是管理bean:

@ManagedBean 
@RequestScoped 
public class MrBean { 

    public void show() { 
     System.out.println("SHOW DIALOG"); 
     RequestContext context = RequestContext.getCurrentInstance(); 
     context.execute("statusDlg.show();"); 
    } 

} 

如果我點擊Ajax按鈕,正確所示的對話框。但是,Non-Ajax按鈕什麼也沒做。在這兩種情況下,在控制檯上都打印了SHOW DIALOG消息。

如果你能告訴我如何解決這個問題,我將不勝感激:)。

最好的問候,

詹姆斯陳

回答

2

我必須讓你失望,但RequestContext非AJAX請求可用,但唯一有用的功能是isAjaxRequest()與布爾返回值。在文檔和API參考中,您可以看到,對於所有其他方法,它被告知它們用於AJAX請求。也適用於​​方法:

當前ajax請求完成後執行javascript。

過去,RequestContext根本不可用,現在它僅適用於未來可能的非AJAX請求。另見this issue

相關問題