【问题标题】:Create PrimeFaces dialogs dynamically动态创建 PrimeFaces 对话框
【发布时间】:2012-06-24 13:13:52
【问题描述】:

我正在使用 primefaces 3.3.1 和 JSF 2 (Mojarra 2.1.9)。

我有一个带有 DataTable 组件和 Dialog 的页面来显示 DataTable 条目的详细信息。当我有一个对话框时,这非常简单。我想要的是尝试允许用户同时打开两个或三个包含不同条目详细信息的 dailog。有人知道如何从服务器获取带有 AJAX 的整个对话,而不仅仅是对话内容吗?

【问题讨论】:

  • 我已经看到了这个问题,但我的问题略有不同。主要区别是我希望允许用户同时打开更多对话框,所以我不能对页面上的对话框进行硬编码。唯一的可能是为表中的每个条目设置一个对话框,这由于网络开销而不好,对于延迟加载的表也是不可能的。
  • 您找到解决方案了吗?

标签: ajax jsf-2 dialog primefaces


【解决方案1】:

@newuserua 您的代码不起作用 widgetVar 值仅在页面加载时设置一次

...
requestContext.update("panel_id");

上面的行更新了完整的面板,它刷新了所有现有的对话框及其内容。

【讨论】:

    【解决方案2】:

    是的,我做到了。为此,我在 backing bean 中以编程方式创建了必要的对话框。我知道这并不是真正的最佳实践,但在这一刻,我认为这只是可能的解决方案。首先,我添加了一个组面板,它是我的 JSF 页面上的对话框容器。然后在支持 bean 上我有一些这样的代码:

    UIComponent panelGroup = facesContext.getViewRoot().findComponent("panel_id");
    Dialog dialog = new Dialog();
    dialog.setHeader("Sample");
    dialog.setVisible(true);
    dialog.setMinimizable(true);
    ...
    panelGroup.getChildren().add(dialog);
    ...
    RequestContext requestContext = RequestContext.getCurrentInstance();
    requestContext.update("panel_id");
    

    【讨论】:

      【解决方案3】:

      对话框 id 也可以是动态的,因此您可以创建一些 id 或其他值并将其提供给他。

      <p:dialog header="Choose Delimiter Type" id="dialog"
          widgetVar="exportDialog#{p.Id}" resizable="false" >
      

      并通过按钮调用;

      <p:commandButton id="id" value="xxx"
                  actionListener="#{p.export2CSV}" ajax="false"
                  onclick="exportDialog#{p.tabId}.show()">                
              </p:commandButton>
      

      【讨论】:

        猜你喜欢
        • 2022-09-08
        • 2013-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-04
        • 1970-01-01
        • 2020-02-21
        相关资源
        最近更新 更多