我想用ui:include包含来自另一个页面的primefaces对话框的内容。必须根据用户单击的按钮将包含的页面设置为动态。我使用了来自JSF dynamic include using Ajax request的BalusC的非常有用的答案。
它在例子中非常精细。但是如果我使用p:对话框而不是h:panelGroup:
,就会出现问题<h:form>
<f:ajax render=":dialog">
<p:commandButton value="page1" action="#{productBean.setDialogPage('/page1.xhtml')}" oncomplete="dialogWidget.show()"></p:commandButton>
<p:commandButton value="page2" action="#{productBean.setDialogPage('/page2.xhtml')}" oncomplete="dialogWidget.show()"></p:commandButton>
</f:ajax>
</h:form>
<p:dialog id="dialog" widgetVar="dialogWidget" >
<ui:include src="#{productBean.dialogPage}" />
</p:dialog>
第一个问题:有时,在对话框出现之前,我必须多次单击一个按钮。它似乎不遵循任何模式,但是随机效应。有时我需要点击两次,有时我需要在按钮上单击四次。
第二个问题:有时,对话框不会显示所选页面,而是显示旧页面。当我关闭对话框并再次选择时,将加载当前页面。它似乎也是一种随机效应。
为什么我会在对话框中遇到这个问题?
答案 0 :(得分:7)
HY, 我不知道你为什么用这个模式显示动态对话框, 对我来说,我喜欢使用这种模式:
<h:form>
<p:commandButton value="page1"
actionListener="#{productBean.setDialogPage('page1')}" oncomplete="PF('dialogWidget').show()" update="dialog"/>
<p:commandButton value="page2"
actionListener="#{productBean.setDialogPage('page2')}" oncomplete="PF('dialogWidget').show()" update="dialog"/>
</h:form>
<p:dialog id="dialog" widgetVar="dialogWidget">
<ui:include src="/#{productBean.dialogPage}.xhtml" />
</p:dialog>
和
page1.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:form>
<!-- your code -->
</h:form>
</ui:composition>
它的工作正常:)
答案 1 :(得分:1)
如果使用Netbeans 8(生成实体+生成jsf页面)对现有表进行逆向工程,它将执行非常类似的开箱即用的操作;在列表页面上有一个创建按钮,显示从另一个页面包含的对话框。您应该尝试一下,请务必在指南的最后一页中选择“primefaces”来生成jsf页面。他们这样做:
List.xhtml:
<p:commandButton id="createButton" icon="ui-icon-plus" value="#{bundle.Create}" actionListener="#{kornstoranalyseStdController.prepareCreate}" update=":KornstoranalyseStdCreateForm" oncomplete="PF('KornstoranalyseStdCreateDialog').show()" />
Create.xhtml包含在列表页面<ui:include src="Create.xhtml"/>
下面的</h:form>
中。
Create.xhtml以:
开头 <ui:composition>
<p:dialog id="KornstoranalyseStdCreateDlg" width="500px" widgetVar="KornstoranalyseStdCreateDialog" modal="true" resizable="true" showEffect="clip" appendTo="@(body)" header="#{bundle.CreateKornstoranalyseStdTitle}" hideEffect="clip" position="top">
<h:form id="KornstoranalyseStdCreateForm">
希望您可以调整以满足您的需求。