0

PrimeFaces<p:dialog>を使用してポップアップ HTML ページを起動し、<p:commandButton>閉じています。

これは、[OK] ボタンが押されたときに行うことです。

<p:commandButton id="submitButton" 
    value="OK" 
    actionListener="#{MultiFileSelectMgmtBean.actionOk}" 
    update=":formID:fileTreeID" 
    oncomplete="dlg1.hide();"/>

問題は、fileTreeIDアクション リスナーが完了する前に更新されることです。actionOk()最初に呼び出されfileTreeIDてから更新されるように強制するにはどうすればよいですか?

編集

問題は、ポップアップ ページ B ( BackingBeanB) が、親ページ A がそのBackingBeanA::BackingBeanAコンストラクターで読み込んで使用するいくつかの値を計算して保存する必要があることです。何が起こるかというと、子ページ B がその を呼び出す前にBackingBeanB::actionOk()親ページ A が構築されます。更新が必要なコンポーネントfileTreeIDはページ A にあり、ページ A コンストラクターで計算された値に依存するため、で計算される新しい値ではなく、古い値で更新されBackingBeanB::actionOk()ます。

4

1 に答える 1

1

あなたのBeanは明らかにリクエストスコープにあります。代わりに、Beanをビュースコープに配置します。

@ManagedBean
@ViewScoped
public class BeanA {}
@ManagedBean
@ViewScoped
public class BeanB {}

このように、Beanは、同じビューを操作している限り存続し、すべてのHTTPリクエストで再構築されることはありません。

アクションが呼び出される前に、が実行されることはupdateありません。バッキングBeanの可能な構築は、必ずしもレンダリング応答中にのみ実行されるとは限りません。すでにビューの復元フェーズで発生する可能性があります。

于 2012-04-25T15:18:35.080 に答える