-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 请求中,因为在您的情况下commandLink会发送 AJAX 请求)。将范围更改为@ViewScoped,您的页面将每页使用一个 bean,而不是每个请求。

于 2013-02-19T10:37:51.590 回答