JSF:在启动对话框时避免父页面bean重新初始化?

时间:2013-02-19 09:59:50

标签: jsf primefaces

我正在使用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被初始化?能以某种方式避免这种情况吗?

1 个答案:

答案 0 :(得分:1)

问题是你使用的是@RequestScoped bean。它们在每个请求中重新创建(即使在AJAX请求中,commandLink也会发送AJAX请求)。将范围更改为@ViewScoped,您的页面将按每页一个bean提供,而不是按请求提供。