1

dynamic=true( dynamic - ajax を使用したコンテンツの遅延読み込みを有効にする)を持つ PrimeFaces ダイアログ内に JSF 複合コンポーネントがあります。コンポーネントは、オーバーライドされたencodeBeginメソッド内で初期化されます。これは、ダイアログが表示されたときに発生します。

動的属性を削除すると、ダイアログが表示されていないときにも encodeBegin メソッドが呼び出され、既存のコードが壊れます。

ダイアログが表示されているときだけ複合コンポーネント コードを実行することはできますか?

コードの選択は次のとおりです。

<p:dialog id="actionsDialog"
    widgetVar="actionsDialogWidget" resizable="false" width="800"
    height="600" showEffect="fade" hideEffect="fade" modal="true">
    <h:form id="confirmationWizardForm">
        <acme:actionWizard name="wizard" widgetVar="wiz" bean="#{accountsBean}"
            header="#{accountsBean.entityHeader}"
            update="form:genericAccounts" onClose="actionsDialogWidget.hide()" />
    </h:form>
</p:dialog>

...

<p:commandButton value="Add"
    action="#{accountsBean.initializeEntity}" process="@this"
    update=":actionsDialog" oncomplete="actionsDialogWidget.show()">
4

1 に答える 1

2

問題は、クライアント側から可視性を制御していることです。つまり、ダイアログのマークアップは生成されますが、CSS ルールによって非表示のままになります。

これは、たとえば、primefacesダイアログ ショーケースを分析することで確認できます。ダイアログは、[基本] コマンド ボタンを押すまで非表示になっています<div id="basicDialog"...が、ダイアログ ウィンドウが表示されていなくても、HTML は常に表示されています。

ダイアログがレンダリングされると、コンテンツもレンダリングされます。これを止めるには、動的なコンテンツ ローディングが必要です。

dynamic 属性を追加すると、ダイアログが表示されるときに ajax を使用して (その内容と共に) ダイアログをフェッチするため、動作が変わります。

于 2013-05-22T13:50:38.417 に答える