2

次のボタンがあります。

   <h:commandButton 
     disabled="#{mybean.searching}"
     binding="#{mybean.searchButton}"
     actionListener="#{mybean.searchForLicenses}"
     value="Search" />

デバッグすると、actionListener が最初に 2 回呼び出され、次に 3 回、次にクリックが 4 回呼び出されることがわかります。

リロードのたびに actionListener がもう一度登録されるようです。

Mojarra 2.1.3 (2.0.6 も試しました) と Tomcat 7 と IceFaces を使用しています。

バインディングは次のように行われます。

private javax.faces.component.UICommand searchButton;

public void setSearchButton(UICommand searchButton) {
  this.searchButton = searchButton;
}

public UICommand getSearchButton() {
  return searchButton;
}
4

2 に答える 2

8

これは、コンポーネントをリクエスト スコープの Bean ではなく、セッションまたはアプリケーション スコープの Bean にバインドした場合に発生する可能性があります。これは単に悪い設計です。まったく同じコンポーネントが複数のリクエスト/ビューで再利用されます。Bean をリクエスト スコープに入れるか、コンポーネント バインディングを完全に取り除く必要があります。

コンポーネントを Bean に直接バインドすることは、多くの場合、コードのどこかで設計が不十分であることを示していることに注意してください。これが解決策であると考えた機能要件および/または問題は何ですか? それを詳しく説明していただければ、適切なアプローチを提案できるかもしれません。

また、アクションリスナーを単体で使うのもデザイン臭がするので注意。「searchForLicenses」は通常のアクション メソッドであると思います。action と actionListener の違いも参照してください。

于 2011-11-08T14:44:37.390 に答える