2012-04-25 19 views
0

私はそれを閉じるには、ポップアップHTMLページと<p:commandButton>を起動するにはPrimeFaces <p:dialog>を使用しています:actionListenerが呼び出される前にAjaxコンポーネントが更新されますか?

これが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()で更新されます。

+2

これは当てはまりません。あなたが問題を誤解しているか、原因がどこかにある。 – BalusC

+0

@BalusC:質問を編集しましたが、今はっきりしているかどうか確認してください。 – Danijel

答えて

1

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

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

豆は限り、あなたは同じビューと対話していると、すべて単一のHTTPリクエストに応じて再構築することがないよう生きるこの方法です。

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

+0

どのように子供の "ページ" Bの値を親Aに渡すように勧めましたか?私がこれまでに行ったことは、 'Map sessionVars = FacesContext.getExternalContext()。getSessionMap();'と 'sessionVars.put'をページBに、' sessionVars.get'をページAに保存することでした。 – Danijel

+0

通常の方法で、マネージドBeanプロパティとしてバインドするだけです。 – BalusC

関連する問題