【问题标题】:PrimeFaces v3.5: Dialog is not shown using RequestContext on non-Ajax callsPrimeFaces v3.5:在非 Ajax 调用中使用 RequestContext 不显示对话框
【发布时间】:2013-02-08 23:15:07
【问题描述】:

在用户指南中,声明RequestContext 将适用于 Ajax 和非 Ajax 调用。但是,用户指南中的所有示例都使用 Ajax,就我而言,它不适用于非 Ajax 调用。

以下是测试页面:

<?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 消息都打印在控制台上。

如果您能告诉我如何解决这个问题,我将不胜感激:)。

最好的问候,

詹姆斯·特兰

【问题讨论】:

    标签: java ajax jsf-2 primefaces dialog


    【解决方案1】:

    我必须让你失望,但RequestContext 在非 AJAX 请求中可用,但唯一有用的函数是带有布尔返回值的 isAjaxRequest()。在文档和 API 参考中,您可以看到所有其他方法都被告知它们用于 AJAX 请求。也适用于execute() 方法:

    在当前 ajax 请求完成后执行一个 javascript。

    过去,RequestContext 根本不可用,现在它仅可用于将来可能用于非 AJAX 请求。另见this issue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      相关资源
      最近更新 更多