7

我有一个带有打开 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)

4

3 回答 3

13

onclick="widgetVar.loadContents()"在下拉按钮中使用overlaypanel,其中widgetVar的 var 是overlayPanel.

于 2013-10-02T14:58:47.550 回答
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>
于 2013-03-28T15:23:42.647 回答
0

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

<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>
于 2015-01-19T01:52:20.953 回答