ajax - 使用 ajax 监听器时 Primefaces 对话框框架不起作用

标签 ajax primefaces dialog jsf-2.2 dialog-framework

我正在尝试使用 Primefaces 4 对话框框架打开对话框,

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 对话框框架只适用于 action 和 actionListener????

我正在使用:
  • Primefaces 4
  • Tomcat 7
  • JSF 2.2.6 莫哈拉

  • 谢谢。

    最佳答案

    你有这个:

    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。如果您已经拥有目标网址,则无需执行此操作。在我的基本测试中,这很有效,与原始测试完全一样,只是您必须在 'url' 字段中传递目标地址,而不是结果。

    希望这可以帮助。

    关于ajax - 使用 ajax 监听器时 Primefaces 对话框框架不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22679006/

    相关文章:

    javascript - 如何获取动态生成的td属性和内部元素id标签的值,其中tr在js/jquery中具有id

    javascript - 非常大数据集的 D3 TreeMap

    ajax - 406 Not Acceptable : Spring 3. 2 + JSON + AJAX

    ajax - 触发器 <cc :clientBehavior> event from <p:ajax> nested in composite

    css - 如何改变咆哮位置

    c++ - win32 - .dll 中的对话框

    android - 对话与 Activity 的使用

    ajax - 是否可以将 GWT-RPC 调用发送到另一台服务器?

    java - 泛型列表每次在 spring 框架的 PrimeFaces 数据表中显示相同的值。我通过循环将组件添加到列表中

    c++ - QDialog 窗口模式