2

Web UI プロジェクトに PrimeFaces UI ライブラリを使用しています。

ボタンのあるmanage_watchfolder.xhtmlページがあり、このボタンでダイアログが起動します。

<p:commandButton value="Add" oncomplete="dlgEditWF.show()"
    update=":editWFForm" process="@none"/>  

dlgEditWFから含めたこの同じファイル内にedit_watchfolder.xhtml

<p:dialog id="editDialog" widgetVar="dlgEditWF" modal="true"
    resizable="true" onShow="showHideActionLocation();">
    <ui:include src="edit/edit_watchfolder.xhtml"/>
</p:dialog> 

問題は、ボタンがクリックされる前にedit_watchfolder.xhtmlロードされたくないということです。ただし、作成edit_watchfolder.xhtmlと同時に「ロード」さmanage_watchfolder.xhtmlれます。そのため、呼び出されたすべての Beanedit_watchfolder.xhtmlが作成、初期化などされ、ユーザーでさえ実際にボタンをクリックすることはありません。これにより、多くのオーバーヘッドが発生し、実行が遅くなります。

これを避けることはできますか?

4

2 に答える 2

5

これは、この回答で説明されている理由から「設計による」ものです: 親 UI コンポーネントがレンダリングされていない場合、 <ui:include> の実行をスキップします。

特定のケースでは、デフォルトで Bean を初期化せずに残し、代わりにコマンド ボタンのアクション メソッド中に初期化を実行することをお勧めします。

<p:commandButton value="Add" action="#{bean.initDialog}" 
    process="@this" update=":editWFForm" oncomplete="dlgEditWF.show()" />
于 2013-02-14T19:12:43.067 に答える
4

の「動的」属性を使用できますp:dialog。primefaces のドキュメントをご覧ください。

<p:commandButton id="basic" value="Show Dialog" onclick="dlg.show();" type="button" />  

<p:dialog id="dialog" header="Dynamic Dialog" widgetVar="dlg" dynamic="true">  
    <h:outputText value="This content is loaded lazy." />  
</p:dialog>  
于 2013-02-18T20:23:32.877 に答える