web-dev-qa-db-ja.com

JSFのコンポーネントバインディングとは何ですか?使用することが望ましい場合

次の質問でbinding属性を使用したコンポーネントバインディングについて読んだことがあります。

ビューのJSFタグの背後にあるUIコンポーネントをバッキングBeanのUIComponentプロパティにバインドすることを理解しています。ただし、コンポーネントバインディングの使用とは何か、いつ使用する必要があるかについては混乱しています。誰かがより簡単な方法でそれを説明し、いくつかの実用的な例を与えることができますか?

22
benz

値だけではなく、entireUIComponentにアクセスしたい場合に使用する必要があります。たとえば、ビューで呼び出したりバインドしたりできないメソッドにアクセスする場合。これはあなたが見つけた最初の質問で答えられます: JSFコンポーネントバインディング-混乱

あなたが見つけた2番目の質問、 component binding vs findComponent()-which?を使用するタイミング 、単に答える "binding vs findComponent() "、応答しません" binding vs value "あなたが考えるようにまったく。これに混乱しないでください。 valueは明らかに勝ちますbinding

実際のコードでは、バッキングBeanへのコンポーネントバインディングは、開発者がプロ​​グラムなどで子をプログラムで操作する必要がある場合にのみ使用されることがよくあります。 component.getChildren().add(...)。ただし、Beanのスコープはリクエストである必要があります。コンポーネントインスタンスは基本的にリクエストごとに作成され、複数のリクエスト間で共有されるべきではないため、より広いスコープは不整合につながる可能性があります。ビュースコープも可能ですが、これは非常にメモリ効率が悪く、2.1.18より古いMojarraバージョンでは、部分的な状態の保存もオフにする必要があります。そうしないと、bindingによって参照されるビュースコープBeanインスタンスが暗黙的に再作成されますリクエストごとに。関連する回答については、 JSF2 FaceletsのJST ...意味がありますか? も参照してください。

コンポーネントを「ビュー」にバインドすることもできます。例えば。

<h:someComponent binding="#{some}">

これは、Faceletスコープ(「ページスコープ」)のUIComponentのインスタンスを指します。これにより、たとえば#{some.clientId}#{some.value}同じページの別の場所。ここではバッキングBeanが関係しないことに注意してください。 BeanプロパティのないJSFコンポーネントバインディング も参照してください。

以下は、binding属性の実際の使用アプライアンスです。

38
BalusC

この答えを読んでください:

JSFでバインディング属性を使用する利点は何ですか?

ただし、コミュニティの多くの人々はバインディングを推奨していません。たとえば、この記事を参照してください。

http://drewdev.blogspot.com/2009/01/jsf-component-binding-stinks.html

2
fareed