2012-03-15 4 views
5

ここに私のチェックボックスがあります。リスナーにコンマで区切られたコンポーネントIDの文字列を準備しています。ここでの問題は、getUpdateComponentList()がリスナーが呼び出される前に呼び出されていることです。したがって、文字列は決して更新されません。p:リスナーの前に呼び出される更新のためのAjaxゲッター

<p:outputPanel> 
<h:selectManyCheckbox value="#{form.colors}"> 
    <f:selectItems value="#{form.colorItems}"/> 
    <p:ajax listener="#{form.testListener}" event="change" update="#{form.updateComponentList}" /> 
</h:selectManyCheckbox> 
</p:outputPanel> 

答えて

9

これは正常な動作です。 PrimeFaces(および標準のJSF)は、要求ごとにupdate(およびrenderoncompleteなど)の属性を再評価しません。それらはビュー単位で評価されます。 RichFacesは、例えば、<a4j:ajax>でそれを行い、まさに期待される振る舞いを生み出します。 PrimeFacesのために

、あなたの最善の策はupdate属性を削除し、代わりにアクションメソッドにRequestContext#addPartialUpdateTarget()または#addPartialUpdateTargets()を使用することです。

など。

RequestContext.getCurrentInstance().addPartialUpdateTargets(updateComponentList); 

それは、List<String>又はSet<String>としてCollection<String>をとります。

ところで、そのevent="change"は不要です。コンポーネントのデフォルトイベントを使用するだけです。


後でこの回答を読んでいると、確かに新しいPrimeFacesのバージョンでは削除され、前述の方法を見つけることができません新しいPrimeFacesのバージョンのユーザーのための更新。代わりに2つのupdate()メソッドのいずれかを使用してください(1つはString、もう1つはCollection<String>です)。

RequestContext.getCurrentInstance().update(updateComponentList); 
+0

@Baluscは、あなたは私の1 exempleをしてください与えることができますか? ! –

+0

addPartialUpdateTargetsメソッドが見つかりません。 –

+1

@berber:PrimeFaces 3.2では廃止され、PrimeFaces 3.4では削除されました。代わりに 'update()'メソッドが必要です。 – BalusC

2

「リスナー」の前に実行される「更新」に関して同様の問題が発生しました。 2つの 'p:ajax'をリスナーと一緒に、もう1人をアップデートして、このトリックを実行しました。あなたのケースでは

<p:outputPanel> 
    <h:selectManyCheckbox value="#{form.colors}"> 
    <f:selectItems value="#{form.colorItems}"/> 
    <p:ajax event="change" listener="#{form.testListener}" /> 
    <p:ajax event="change" update="#{form.updateComponentList}" /> 
    </h:selectManyCheckbox> 
</p:outputPanel> 
関連する問題