【问题标题】:JSF: Dynamic include page into primefaces dialogJSF:将页面动态包含到primefaces对话框中
【发布时间】:2014-07-22 14:00:33
【问题描述】:

我想使用 ui:include 包含来自另一个页面的 primefaces 对话框的内容。包含的页面必须根据用户单击的按钮设置为动态的。我使用了来自 JSF dynamic include using Ajax request 的 BalusC 的非常有用的答案。

它在示例中工作得非常好。但是如果我使用 p:dialog 而不是 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>

第一个问题:有时,我必须在对话框出现之前多次单击一个按钮。它似乎没有遵循任何模式,而是一种随机效应。有时需要单击两次,有时需要单击按钮四次。

第二个问题:有时,对话框出现的不是所选页面而是旧页面。当我关闭对话框并再次选择时,将加载当前页面。这似乎也是一种随机效应。

为什么我会在对话框中遇到这个问题?

【问题讨论】:

  • 我在 Bean 中调试了 getDialogPage() 和 setDialogPage() 的调用。我注意到,当一切正常时,调用顺序是 get-SET-get-get-get。但是当我得到旧的错误页面时,顺序是get-get-get-SET-get。

标签: jsf jsf-2 primefaces


【解决方案1】:

如果您使用 Netbeans 8 对现有表进行逆向工程(生成实体 + 生成 jsf 页面),它将执行非常类似的开箱即用操作;在列表页面上有一个创建按钮,它显示了另一个页面中包含的对话框。您应该尝试一下,请务必在生成jsf页面指南的最后一页中选择“primefaces”。他们这样做:

列表.xhtml:

<p:commandButton id="createButton" icon="ui-icon-plus"   value="#{bundle.Create}" actionListener="#{kornstoranalyseStdController.prepareCreate}" update=":KornstoranalyseStdCreateForm" oncomplete="PF('KornstoranalyseStdCreateDialog').show()" />

Create.xhtml 包含在列表页中&lt;/h:form&gt; 下方的&lt;ui:include src="Create.xhtml"/&gt; 中。

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">

希望您可以根据自己的需要进行调整。

【讨论】:

    【解决方案2】:

    你, 我不知道你为什么使用这种模式来显示动态对话框, 对我来说,我喜欢使用这种模式:

    <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>
    

    一切正常:)

    【讨论】:

      猜你喜欢
      • 2012-05-17
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      相关资源
      最近更新 更多