9

私はJSFが初めてで、疑問に思っていました:

特定のページのすべての作業を処理するコントローラーと、そのページのすべてのデータを保持する Bean がある場合、両方が必要です。

@ManagedProperty(value="#{myBean}") 

コントローラの注釈と

@ManagedBean(name="myBean")
@SessionScoped

フォーム Bean の注釈

4

2 に答える 2

16

JSF のマネージド Bean は、Web ページの状態を格納するために使用されます。JSF 実装は、Bean オブジェクトの作成と破棄を担当します (そのためマネージド Bean と呼ばれます)。

@ManagedBean を記述するすべてのクラスについて、名前を持つ Bean の使用を検出すると、JSF 実装によって Bean オブジェクトが作成されます (Bean 名を指定するか、JSF に任せてデフォルトの名前クラスを使用することができます)。最初の文字を小文字に変更した名前)。作成されたオブジェクトは、指定されたスコープのマップに配置されます。各スコープには、そのスコープが指定された Bean オブジェクトを格納するために使用するマップがあります。

コントローラーでこれらの Bean の値が必要な場合は、ManagedProperty アノテーションを使用して注入する必要があります。managedProperty のセッター メソッドをコントローラーに提供する必要があることに注意してください。

したがって、あなたの質問に答えるには、Bean インスタンスを管理し、セッション スコープに固有のテーブルに値を格納するように JSF 実装に指示するために、managedBean アノテーションが必要です。また、ManagedProperty アノテーションは、現在のセッションに保存されているその Bean を使用して、そのすべての値にアクセスできるようにするために必要です。

于 2013-12-06T10:55:10.363 に答える
9

@ManagedBeanアノテーションを使用して、Java Bean を JSF フレームワークに登録します。<managed-bean>これは、faces-config.xml要素の代替です。nameキャメルケースの単純なクラス名にすでにデフォルト設定されているため、通常は属性を使用しません。

およびその他のスコープ アノテーションを使用@RequestScopeして、アノテーションを介して必要なスコープを明示的に指定します。これは、<managed-bean-scope>xml エントリを指定することと同じです。スコープを指定しない場合、デフォルトで になり@NoneScopedます。

その属性で EL 式を使用@ManagedPropertyおよび指定して、valueJSF 提供の依存性注入エンジンを JSF アーティファクト (より広いスコープを持つ他のマネージド Bean や などの EL 定義の変数など) に使用しparamます。他の JSF アーティファクト (最も一般的には Bean) に注入された値が必要な場合に備えて、これを行います。注入された値は、Bean の@PostConstruct注釈付きメソッドで使用できます。<managed-property>これは、 xml エントリの代替です。

要約すると。@ManagedBean @RequestScopedBean を JSF フレームワークに登録するために使用します。この Bean 内で使用@ManagedPropertyして、この Bean 内で同じスコープまたはより広いスコープを持つ他の JSF Bean を参照できるようにします。作成された Bean で他の Bean を参照する必要がない場合は、@ManagedProperty純粋にオプションであるため、アノテーションを使用する必要はありません。

于 2013-12-06T10:41:11.947 に答える