我有一个Primefaces项目,我试图复制桌面应用程序的行为。由于桌面应用程序的性质,有相当多的弹出对话框,导致页面处理变得非常慢(初始页面加载:10-20秒,AJAX请求:6-10秒)。
我已经有了所有对话框的单独文件,我想使用支持bean将它们作为对话框弹出,而不必在我的主文件中使用<ui:include>
。有没有办法做到这一点?
e.g:
<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()");
}
}
答案 0 :(得分: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对话框架,它允许您在运行时动态呈现外部页面。