1

我有一个我不明白的问题:我请求一个新站点。一个站点有一个可以打开对话框的链接。该链接位于表单内。对话框不在表单内。

简化的代码示例:

    <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 方法会执行一次。

有人有想法吗?

4

1 回答 1

1

这是因为您id<p:dialog>. 如果您将其固定id为静态,或者改为引用请求或应用程序范围的 bean 属性,那么您的视图范围 bean 将按预期运行。

也可以看看:

于 2012-10-20T12:56:47.823 回答