我正在爲我的Web UI項目使用PrimeFaces UI庫。爲什麼第一次啓動對話框時會創建兩次backing bean?
我有一個manage_watchfolder.xhtml
頁,有一個按鈕,這個按鈕啓動一個對話框:
<p:commandButton value="Add" oncomplete="dlgEditWF.show()" update=":editWFForm">
<f:param value="#{item.value.ID}" name="editId"/>
<h:graphicImage value="./edit.png" />
</p:commandLink>
這裏面相同的文件我有dlgEditWF
從edit_watchfolder.xhtml
包括:
<p:dialog id="editDialog" widgetVar="dlgEditWF" dynamic="true">
<ui:include src="edit/edit_watchfolder.xhtml"/>
</p:dialog>
我使用dynamic=="true"
以防止點擊按鈕之前加載edit_watchfolder.xhtml
。
editWFForm
是edit_watchfolder.xhtml
中的一種形式。
問題是,當我啓動第一個對話框時,edit_watchfolder.xhtml
支持bean(請求作用域)被創建兩次。第一次通過editId
(見上面的代碼)傳遞的值是可以的,但第二次它不在那裏,所以輔助bean得到錯誤的值。
當我回到(OK
或Cancel
按鈕)到父頁面並再次啓動對話框後,問題消失了,一切正常。這個問題似乎只是第一次啓動。
爲什麼第一次啓動對話框時會創建兩次backing bean?
也許這有助於:http://stackoverflow.com/questions/4826377/jsf-backing-bean-constructor-called-multiple-times – 2013-02-21 12:22:02