2012-01-18 16 views
3

このコードはされるがピックリスト。 getDualListModelForTags()では、いくつかの変更を加えて、選択リストを更新します。しかし、ピックリスト(id = tags)は再びレンダリングされません。ページを更新するときにのみ、ピックリストに加えられた変更が反映されます。JSFのAjaxのコマンドボタンは

答えて

12

PrimeFaces <p:commandButton>コンポーネントは、<f:ajax>と一緒には使用できません。代わりにボタンの独自のAjaxターゲット属性を使用する必要があります。 <f:ajax execute>の代わりに<p:commandButton process>を使用してください。しかしこれは既にデフォルトで@formになっていますので、省略することができます。 <f:ajax render>の代わりに<p:commandButton update>を使用してください。既に@formでカバーされているクライアントIDを指定する必要はないので、ちょうど@formで十分です。また、既にデフォルトのままであるので、ajax="true"属性は不要です。

は、だから、これは実行する必要があります。

<p:commandButton value="Select tags" update="@form" /> 

無関係具体的な問題に、あなたはgetterメソッド内のビジネス仕事をやっています。これは悪い考えです。代わりにボタンのactionメソッドで行います。また、ビュースコープのデータに対してセッションスコープBeanを使用しているようです。これは悪い考えです。代わりにビュースコープにBeanを配置します。

+0

優れた答え。私はあなたがセッションスコープのBeanを使用していることを知っていると思います。なぜなら、ページの更新中にBean変数が残っているからです。しかし、なぜビューのスコープは良いでしょうか? – BigJ

+1

これは、セッションスコープのデータではなく、ビュースコープのデータを扱っているためです。ビュースコープのデータをセッションスコープのデータとして扱う場合、エンドユーザは同じブラウザセッション内の複数のウィンドウ/タブで同じページ(ビュー)を開いていて、相互作用ごとに切り替えると不一致が表示されることがあります。 – BalusC

関連する問題