私はJSFが初めてで、疑問に思っていました:
特定のページのすべての作業を処理するコントローラーと、そのページのすべてのデータを保持する Bean がある場合、両方が必要です。
@ManagedProperty(value="#{myBean}")
コントローラの注釈と
@ManagedBean(name="myBean")
@SessionScoped
フォーム Bean の注釈
私はJSFが初めてで、疑問に思っていました:
特定のページのすべての作業を処理するコントローラーと、そのページのすべてのデータを保持する Bean がある場合、両方が必要です。
@ManagedProperty(value="#{myBean}")
コントローラの注釈と
@ManagedBean(name="myBean")
@SessionScoped
フォーム Bean の注釈
JSF のマネージド Bean は、Web ページの状態を格納するために使用されます。JSF 実装は、Bean オブジェクトの作成と破棄を担当します (そのためマネージド Bean と呼ばれます)。
@ManagedBean を記述するすべてのクラスについて、名前を持つ Bean の使用を検出すると、JSF 実装によって Bean オブジェクトが作成されます (Bean 名を指定するか、JSF に任せてデフォルトの名前クラスを使用することができます)。最初の文字を小文字に変更した名前)。作成されたオブジェクトは、指定されたスコープのマップに配置されます。各スコープには、そのスコープが指定された Bean オブジェクトを格納するために使用するマップがあります。
コントローラーでこれらの Bean の値が必要な場合は、ManagedProperty アノテーションを使用して注入する必要があります。managedProperty のセッター メソッドをコントローラーに提供する必要があることに注意してください。
したがって、あなたの質問に答えるには、Bean インスタンスを管理し、セッション スコープに固有のテーブルに値を格納するように JSF 実装に指示するために、managedBean アノテーションが必要です。また、ManagedProperty アノテーションは、現在のセッションに保存されているその Bean を使用して、そのすべての値にアクセスできるようにするために必要です。
@ManagedBean
アノテーションを使用して、Java Bean を JSF フレームワークに登録します。<managed-bean>
これは、faces-config.xml要素の代替です。name
キャメルケースの単純なクラス名にすでにデフォルト設定されているため、通常は属性を使用しません。
およびその他のスコープ アノテーションを使用@RequestScope
して、アノテーションを介して必要なスコープを明示的に指定します。これは、<managed-bean-scope>
xml エントリを指定することと同じです。スコープを指定しない場合、デフォルトで になり@NoneScoped
ます。
その属性で EL 式を使用@ManagedProperty
および指定して、value
JSF 提供の依存性注入エンジンを JSF アーティファクト (より広いスコープを持つ他のマネージド Bean や などの EL 定義の変数など) に使用しparam
ます。他の JSF アーティファクト (最も一般的には Bean) に注入された値が必要な場合に備えて、これを行います。注入された値は、Bean の@PostConstruct
注釈付きメソッドで使用できます。<managed-property>
これは、 xml エントリの代替です。
要約すると。@ManagedBean @RequestScoped
Bean を JSF フレームワークに登録するために使用します。この Bean 内で使用@ManagedProperty
して、この Bean 内で同じスコープまたはより広いスコープを持つ他の JSF Bean を参照できるようにします。作成された Bean で他の Bean を参照する必要がない場合は、@ManagedProperty
純粋にオプションであるため、アノテーションを使用する必要はありません。