【问题标题】:JSF ViewScope and Bean creationJSF ViewScope 和 Bean 创建
【发布时间】:2012-10-10 22:01:27
【问题描述】:

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

简化的代码示例:

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

有人有想法吗?

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    这是因为您在 &lt;p:dialog&gt; 的视图构建时间属性 id 中引用了视图范围 bean 属性。如果您将 id 固定为静态,或者改为引用请求或应用程序范围的 bean 属性,那么您的视图范围 bean 将按预期运行。

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      相关资源
      最近更新 更多