2009-12-10 14 views
6

私はいくつかの読書や演奏を行っていると私はまだ私は誰かが答えかもしれません期待していたいくつかの質問があります。だから、JSF複数のバッキングBean

を、私は、単一のJSFページ内の2つの以上のバッキングBeanを使用できますか?

<h:intputText value="#{myFirstBean.firstProperty}" /> 
<h:intputText value="#{mySecondBean.secondProperty}" /> 

もしできれば、なぜそれをしないのですか? (私は誰もしないので、私はしないと仮定します)

私はできません、なぜですか?

また、「ページの読み込み時にフレームワークがバッキングBeanをインスタンス化し、ポストバックの場合はポピュレートする」のようなものを読んでいます。彼らはバッキングbeanと言っていますが、フレームワークがどのようにを知っているのか理解できません。バッキングbeanがインスタンス化します。

答えて

4

のは、いくつかの用語を明確にしましょう:

  • 管理対象Bean、あなたがsee
  • バッキングBeanにを管理対象Bean機能を使用して設定することができJavaBeansコンポーネントですのJavaServerが関連付けられている管理対象Beanに直面しています特定のページで使用されるUIコンポーネントsee

1つのページに関連するUIコンポーネントのバインディング、リスナー、ロジックなどを2つ以上のバッキングBeanに分割することは可能ですが、非常に望ましくなく、多くの問題や悪い可能性がありますコード。

+5

Sunからのこの定義はかなり不透明です。私はむしろ言うだろう:バッキングBeanはビューに関連付けられたJava(モデル)クラスであり、マネージドBeanはこのクラスの*インスタンス*であり、*特定の*ビューとスコープに関連付けられています。 – BalusC

+1

確かに。多くの開発者は両方の用語を混同します。このクラスがjsfページの目的のために作成されるとき、私は状況の中で「backing bean」という言葉を使用します。他のBean(データモデルBeanのようなもの)では、用語Beanを使用します。 – cetnar

3

どうしてですか?これはまさに正当なことです。 一般的には、ページは1つのBeanに関連付けられている必要があります(構造が良いため)。たとえば、各ページの現在の時刻を表示する場合は、timeBean.currentTimeを自由に参照できます。もちろん、インクルード/テンプレートを使用する方が望ましい)。

+0

GETリクエストでページを表示する際にどのBeanがインスタンス化するかをフレームワークがどのように決定するかを理解しようとしています。 Beanがインスタンス化されるのは「いつ」になるのが正しいと思いますか?私は最初のアクセス時に仮定する必要があります。 –

+1

管理された豆は、表示されたページで使用されるときにフレームワークによって作成されます。もちろん、まだ終了していないリクエストスコープBeanとセッションBeanについて話しています。 – cetnar

1

その他の質問は既に回答済みです。しかし:

また、「フレームワークがバッキングBeanをインスタンス化し、ポストバックの場合はフレームワークにロードする」のようなものがあります。彼らはバッキングBeanを言うが、フレームワークがどのバッキングBeanをインスタンス化するかを理解できません。

豆は名前で解決されます。たとえば、#{myFirstBean.firstProperty}は、 'myFirstBean'という名前のBean(クラスMyFirstBeanのインスタンス)を検索します。あなたは、のように名前を調整することができます。

@ManagedBean(name = "foo") 
public class SomeClass { ... } 

次にあなたが#{foo.firstProperty}経由でそれを参照することができます。

関連する問題