Jsf 2 模态对话框无法正常工作

Jsf 2 模态对话框无法正常工作,jsf-2,primefaces,modal-dialog,java-ee-6,Jsf 2,Primefaces,Modal Dialog,Java Ee 6,我正在开发一个JSF/Primefaces应用程序。我想防止页面隐藏在primefaces对话框后面。我尝试了以下代码: <h:form id="form"> <p:dataTable id="types" value="#{resourcesTypesMBean.resourceTypes}" var="item" selection="#{resourcesTypesMBean.selectedResour

我正在开发一个JSF/Primefaces应用程序。我想防止页面隐藏在primefaces对话框后面。我尝试了以下代码:

    <h:form id="form">
        <p:dataTable id="types" value="#{resourcesTypesMBean.resourceTypes}" var="item" 
                     selection="#{resourcesTypesMBean.selectedResourceType}"
                     rowKey="#{item.id}" selectionMode="single">
            <f:facet name="header" >  
                <table style="border: hidden">
                    <tbody >
                        <tr >
                            <td align="left" style="border: hidden">
                                <p:outputLabel value="List of Resources' Types"/>
                            </td>
                            <td align="right" style="border: hidden">
                                <p:commandButton 
                                   oncomplete="ResourceTypeDialogNew.show()" 
                                   icon="ui-icon-plus" title="add"/>
                                <p:commandButton id="btnDelete" title="delete 
                      " actionListener="#{resourcesTypesMBean.deleteResourceType()}" 
                                 update="types" icon="ui-icon-trash" />
                                <p:button outcome="Resources.xhtml"
                               icon="ui-icon-arrowthick-1-w" title="back"/>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </f:facet> 
            <p:column headerText="Name">
                <p:outputLabel value="#{item.name}"/>
            </p:column>
            <p:column headerText="Code">
                <p:outputLabel value="#{item.code}"/>
            </p:column>
                    </p:dataTable>
    </h:form>

    <h:form id="newResourceTypeForm">
          <p:dialog header="New Resource Type" widgetVar="ResourceTypeDialogNew" 
           resizable="false"  modal="true" appendTo="@(body)" showEffect="explode"
           hideEffect="explode"  style="position: absolute ;"
           id="dialogNewResourceType">  
            <p:panel id="panel">   
              <p:messages id="messages" />
              <p:panelGrid id="newResourceType" columns="2" style="margin-bottom:10px">  
                    <f:facet name="header">  
                        <p:graphicImage value="/images/resource.png"/>  
                    </f:facet>
                    <p:outputLabel value="Name" for="name"/>
                    <p:inputText id="name" value="#{resourcesTypesMBean.name}"   
                    required="true" requiredMessage="The Name field is required." />
                    <p:outputLabel value="Code" for="code"/>
                    <p:inputText id="code" value="#{resourcesTypesMBean.code}"  
                    required="true" requiredMessage="The Code field is required." />
                  </p:panelGrid> 
                <div align="right" >
                    <p:commandButton value="Save" style="margin-right: 5px" icon="ui-
                    icon-circle-check"  oncomplete=" handleSubmitRequest(xhr, status,
                    args, 'ResourceTypeDialogNew','newResourceTypeForm');" 
                    actionListener="#{resourcesTypesMBean.addResourceType()}" 
                    update=":form:types, :growl" /> 
                    <p:commandButton  value="Cancel"  
                    oncomplete="ResourceTypeDialogNew.hide();"
                    icon="ui-icon-arrowrefresh-1-n" styleClass="ui-priority-primary"/>
                </div>
            </p:panel>
        </p:dialog>  
    </h:form>

显示该对话框时,后面的页面被阻止,但
保存
取消
按钮工作不正常,用户将自动从应用程序注销。 我需要你的帮助。
更新:没有
modal=“true”appendTo=“@(body)”
它工作正常(包括
保存
取消
按钮)。

现在无法检查解决方案的有效期,但以下情况看起来可疑:

当您检查呈现的XHTML代码时(例如通过Firefox中的Firebug),您可能会发现表单
newResourceTypeForm
实际上是空的。我猜,使用
appendTo=“@body”,对话框面板直接连接到
body`-元素,并通过它在任何公式之外。这可以防止按钮进入工作区

  • 将表单移动到
    p:dialog
    中,或
  • 尝试删除
    appendTo
  • 尝试重写
    appendTo=“@form”

希望其中一个可能有助于您继续前进,如果-ups-…

现在无法检查解决方案生命周期,但以下内容看起来很可疑:

当您检查呈现的XHTML代码时(例如通过Firefox中的Firebug),您可能会发现表单
newResourceTypeForm
实际上是空的。我猜,使用
appendTo=“@body”,对话框面板直接连接到
body`-元素,并通过它在任何公式之外。这可以防止按钮进入工作区

  • 将表单移动到
    p:dialog
    中,或
  • 尝试删除
    appendTo
  • 尝试重写
    appendTo=“@form”

希望其中一个可以帮助您继续前进,如果-ups-…

Hi Reema,请尝试分解上面的xhtml代码,直到只剩下重要的部分。这将提高有人能帮助你的变化。另外,
resourcesTypesMBean.addResourceType()
背后的方法可能是出于兴趣。@L-Ray请检查更新。嗨,Reema,尝试分解上层xhtml代码,直到只剩下重要部分。这将提高有人能帮助你的变化。另外,
resourcesTypesMBean.addResourceType()
背后的方法可能是出于兴趣。@L-Ray请检查update.with appendTo=“@form”或Droping appendTo,对话框后面的页面没有被阻止。感谢帮助:)解决方案是移动表单。。。进入p:dialog.with appendTo=“@form”或拖放appendTo,对话框后面的页面不会被阻止。感谢帮助:)解决方案是移动表单。。。进入p:对话框。