我正在为我的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