23

binding次の質問で、属性を使用したコンポーネントのバインディングについて読みました。

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

4

2 に答える 2

40

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

あなたが見つけた2番目の質問、コンポーネントバインディングとfindComponent() - いつどちらを使用するのですか? 、単に「対」と答えるだけbindingfindComponent()あなたが思っているようにbindingvalueとはまったく答えません。これで混乱しないでください。value明らかに勝つでしょうbinding

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

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

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

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

binding属性の実際の使用アプライアンスを次に示します。

于 2012-09-20T12:34:37.770 に答える
2

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

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

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

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

于 2012-09-20T07:32:47.347 に答える