2013-03-27 12 views
7

プリムスペース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> 

は動的なコンテンツは、実際のアプリケーションでフェッチしなければならない、とupdate="@form"は、他のフォームを更新するために必要とされているため、パネルはdynamic="true"を持たなければならないことに注意してくださいコンポーネント。

問題は次のとおりです。両方のアトリビュートがある場合は、dynamic="true"update="@form"オーバーレイが最初に表示されます。 「閉じる」ボタンをクリックした後、もう一度「オーバーレイを開く」をクリックしようとすると、パネルは表示されません。

私は間違っていますか?私は以下のコードで気づいた何

(使用PrimeFaces 3.5とGlassFish 3.1.2.2)

答えて

0

はできるだけ早くあなたがオープンオーバーレイボタンを含むフォーム上の更新がそうであるように、それが壊れています。

<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に埋め込まれたボタンは、オーバーレイを切り替えるために使用されるボタンをクリックして起動しようとすることができます。おそらく以下のようなものです。 widgetVaroverlayPanelのVARです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> 
+0

ありがとうございますAksel。残念ながら、オーバーレイは多くの異なるビューで使用されるコンポジットコンポーネントの一部なので、親フォーム要素によってホストされなければなりません。ネストされたフォームで終わるので、独自のフォームを定義することはできません。 – yankee

13

使用onclick="widgetVar.loadContents()"

+1

ありがとうございました。この方法は、Primefaces User Guideには記載されていません。 –

+2

更新:onclick = "PF( 'widgetVar').loadContents();" – Koekiebox

0

あなたのオーバーレイパネルには、あなたのボタンの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> 
関連する問題