-1

Prime Faces (JSF UI ライブラリ) を使用しています。

commandLinkそれぞれがダイアログを表示するいくつかのボタンがあるページがあります。

<f:view>
<h:form>
.
.
.
    <p:dataTable value="#{ServerMgmtBean.objectList}" var="server">
.
.
.
    <p:commandLink oncomplete="dlgAssignServers.show()">        
        <p:graphicImage alt="Assign Image" value="./images/assign.png" />
    </p:commandLink>
.
.
.
</h:form>

<p:dialog id="assignServersDialog" header="Assign Servers" widgetVar="dlgAssignServers" modal="true" width="400">
    <ui:include src="assign/assign_sg_servers.xhtml"/>
</p:dialog>

</f:view>

問題は、をクリックするたびにcommmandLink、ページの背後にあるすべての Bean が再作成され (この例でServerMgmtBeanは )、ダイアログが起動されることです。すべての Bean はリクエスト スコープです。

ダイアログが表示される前に進行状況インジケーターが必要になるまで、処理が大幅に遅くなります。Bean が初期化されるのはなぜですか? どうにかしてこれを回避することはできますか?

4

1 に答える 1

1

問題は、@RequestScopedBean を使用していることです。それらはすべてのリクエストで再作成されます(あなたの場合のようにAJAXリクエストでもAJAXリクエストcommandLinkが送信されます)。スコープを に変更する@ViewScopedと、リクエストごとではなく、ページごとに 1 つの Bean がページに提供されます。

于 2013-02-19T10:37:51.590 に答える