【问题标题】:Include dialog from another file via backing bean通过支持 bean 包含来自另一个文件的对话框
【发布时间】:2014-09-16 12:56:45
【问题描述】:

我有一个 Primefaces 项目,我试图在其中复制桌面应用程序的行为。由于桌面应用的性质,弹出的对话框比较多,导致页面处理变得很慢(初始页面加载:10-20秒,AJAX请求:6-10秒)。

我已经为所有对话框提供了单独的文件,我想使用支持 bean 将它们作为对话框弹出,而不必在我的主文件中使用 <ui:include>。有没有办法做到这一点?

例如:

<p:commandButton id="showSearchDialog"
                 action="#{managedBean.showSearchDialog()}"/>
<p:dialog widgetVar="searchDialog">
</p:dialog>
public class ManagedBean {
  public void showSearchDialog() {
    //Some sort of function that knows to process the contents of searchDialog.xhtml
    //  and insert it into the relevant <p:dialog>

    RequestContext.getCurrentInstance().execute("PF('searchDialog').show()");
  }
}

【问题讨论】:

    标签: jsf primefaces dialog jsf-2.2


    【解决方案1】:

    如果您的目标是减小页面大小,我会通过对话框本身的条件渲染来处理它,该对话框本身由支持 bean 属性确定,该属性将由命令操作设置:

    <p:commandButton id="showSearchDialog"
                     action="#{managedBean.showSearchDialog()}"
                     update="dialogs"
                     oncomplete="PF('searchDialog').show()" />
    <h:panelGroup id="dialogs" layout="block">
     <p:dialog widgetVar="searchDialog" rendered="#{managedBean.currentDialog eq 'search'}">
      <ui:include src="searchDialog.xhtml" />
     </p:dialog>
    </h:panelGroup>
    
    public class ManagedBean {
      private String currentDialog;
      public String getCurrentDialog() { return currentDialog; }
      public void showSearchDialog() { currentDialog = "search"; }
    }
    

    然后您可以有条件地在“对话框”块中呈现所有对话框,并使用 ajax 动态刷新呈现的内容。


    另一个需要考虑的选项是使用 PrimeFaces 对话框框架,它允许您在运行时动态呈现外部页面。

    【讨论】:

    • 这种方法的唯一问题(正如我在尝试时发现的那样)是它仍然需要查询整个 JSF 树才能确定是否呈现每个对话框,这仍然需要时间.不过,谢谢你的想法。
    • 我希望避免这样做,因为我已经在单独的 xhtml 文件中定义了所有对话框。为建议 +1(也部分是为了让您的回复高于另一个)
    • 您是否看到了使用 PF 对话框架的建议选项?这正是您正在寻找的,因为您已经将对话框放在单独的文件中。很酷的东西。
    • 这就是我所说的我希望避免的。我不想每次需要更改对话框上的选项之一时都重新编译代码。
    • 重新编译?对话框框架仅允许您通过对服务器端动作侦听器的回发调用在对话框中动态加载 xhtml 文件。无需重新编译代码。您甚至可以将结果作为参数传递给单个动作侦听器,以更加灵活。所有对话框内容都可以包含在 xhtml 文件中。你试过这个吗?
    猜你喜欢
    • 2014-12-28
    • 1970-01-01
    • 2021-11-04
    • 2014-03-17
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 2011-11-26
    相关资源
    最近更新 更多