Primefaces动态overlayPanel只显示一次

时间:2013-03-27 10:40:23

标签: jsf-2 primefaces

我有一个带有按钮的表单,可以打开Primafaces overlayPanel。 在面板中有另一个按钮,它执行Ajax操作,然后关闭叠加层 这是一个完全没有Ajax操作的简化版本:

<h:form>
    <p:commandButton id="button1" value="Open overlay" type="button"/>
    <p:overlayPanel for="button1" widgetVar="ovl" dynamic="true">
        <p:commandButton value="Close" oncomplete="ovl.hide();"
                         update="@form"/>
    </p:overlayPanel>
</h:form>

请注意,该面板必须为dynamic="true",因为必须在实际应用中提取动态内容,并且需要update="@form"才能更新其他表单组件。

问题是:如果我同时拥有属性dynamic="true"update="@form",那么叠加层只会在第一时间出现。单击“关闭”按钮后,如果我再次单击“打开覆盖”,则面板将不会显示。

我做错了什么?

(使用PrimeFaces 3.5和GlassFish 3.1.2.2)

3 个答案:

答案 0 :(得分:13)

onclick="widgetVar.loadContents()"下方的按钮中使用overlaypanel,其中widgetVaroverlayPanel的变种。

答案 1 :(得分:0)

我在下面的代码中注意到,只要您在包含Open-Overlay按钮的表单上进行更新,它就会中断。

<h:form>
    <p:commandButton id="button1" value="Open overlay" type="button"/>
    <p:commandButton value="break things" update="@form" />
    <p:overlayPanel for="button1" dynamic="true">
        <p:commandButton value="Close" update="@form" />
    </p:overlayPanel>
</h:form>

如果可以将表单拆分为两个,嵌入在OverlayPanel中的按钮可以尝试调用单击用于切换叠加层的按钮。也许符合下面的内容。

<h:form>
    <p:commandButton id="button1" value="Open overlay" type="button"/>
    <p:overlayPanel for="button1" dynamic="true" >
        <p:commandButton value="Close" update=":formToBeUpdated" onclick="document.getElementById('button1').click();"/>
    </p:overlayPanel>
</h:form>

<h:form id="formToBeUpdated">
    <h:inputText value="bleh"/>
</h:form>

答案 2 :(得分:0)

你应该给你的overlayPanel一个id和oncompelete你的按钮显示它。 代码如下:

<h:form>
   <p:commandButton id="button1" value="Open overlay" type="button" oncomplete="PF('ovlID').show()"/>
   <p:overlayPanel id="ovlID" for="button1" widgetVar="ovl" dynamic="true">
      <p:commandButton value="Close" oncomplete="ovl.hide();"
                     update="@form"/>
   </p:overlayPanel>
</h:form>