わからない問題があります。新しいサイトをリクエストします。サイトには、ダイアログを開くリンクがあります。リンクはフォーム内にあります。ダイアログはフォーム内にありません。
簡略化されたコード例:
<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 メソッドが非ポストバック要求で 2 回呼び出されることです。つまり、Bean は同じビューである必要がありますが、2 回構築されます。テスト目的でダイアログをフォーム内に移動すると、予想どおり、一度呼び出されます。しかし、ダイアログには独自のフォームがあるため、これは確かに解決策ではありません。サイトが読み込まれ、F5 キーを押すと、PostConstruct メソッドが 1 回実行されます。
誰かアイデアはありますか?