我有一个我不明白的问题:我请求一个新站点。一个站点有一个可以打开对话框的链接。该链接位于表单内。对话框不在表单内。
简化的代码示例:
<p:outputPanel id="layout-center" >
<h:form>
<p:commandLink id="option_field_user_profile" actionListener="#{controllerBean.getBean('userProfileBean', component).init}" oncomplete="#{controllerBean.getBean('userProfileBean', component).show}" >
<h:outputText value="#{msg.mProfile}"/>
</p:commandLink>
</h:form>
</p:outputPanel>
<p:dialog header="#{userPreferencesBean.header}" widgetVar="#{userPreferencesBean.widgetVar}" appendToBody="#{userPreferencesBean.appendToBody}" resizable="#{userPreferencesBean.resizable}" id="#{userPreferencesBean.xhtmlId}" dynamic="#{userPreferencesBean.dynamic}" modal="#{userPreferencesBean.modal}" closable="#{userPreferenceBean.closable}">
<ui:include src="/WEB-INF/templates/modification/userPreferences.xhtml" />
</p:dialog>
UserPreferencesBean 在 ViewScope 中。我现在的问题是,来自 UserPreferencesBean 的 @PostConstruct 方法在非回发请求中被调用了两次,即 Bean 被构造了两次,尽管它应该是相同的视图。如果我将对话框移动到表单内以进行测试,它会像预期的那样被调用一次。但由于对话框有自己的形式,这肯定不是一个解决方案。当网站加载完毕并按下 F5 时,PostConstruct 方法会执行一次。
有人有想法吗?