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-button を含むフォームを更新するとすぐに壊れることです。

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

フォームを 2 つに分割しても問題ない場合、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 を指定し、ボタンの oncomelete でそれを表示する必要があります。コードは次のようになります。

<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 に答える