8

JSF の管理対象コンポーネント間でデータを渡すことは実際に可能ですか? はいの場合、これを達成する方法は?

誰でもサンプルを提供できますか?

4

2 に答える 2

14

いくつかの方法があります。管理対象のBeanが相互に関連している場合、最もクリーンな方法はインジェクションです。JSFのバージョンとCDIが利用可能かどうかによって、さまざまな方法があります。

CDI

を使用するだけ@Injectです。

@Named
@SessionScoped
public class Bean1 {

    // ...
}

@Named
@RequestScoped
public class Bean2 {

    @Inject
    private Bean1 bean1; // No getter/setter needed.
}

他の方法でも可能ですが、CDIはプロキシのカバーの下に挿入するため、スコープは重要ではありません。

JSF 2.x

を使用し@ManagedPropertyます。

@ManagedBean
@SessionScoped
public class Bean1 {

    // ...
}

@ManagedBean
@RequestScoped
public class Bean2 {

    @ManagedProperty("#{bean1}")
    private Bean1 bean1; // Getter/setter required.
}

この特定の例では、JSFがプロキシインスタンスではなく物理インスタンスを注入するため、他の方法は不可能です。同じスコープまたはより広いスコープのBeanのみを特定のスコープのBeanに注入できます。

JSF 1.x

で使用<managed-property>faces-config.xmlます。

public class Bean1 {

    // ...
}

public class Bean2 {

    private Bean1 bean1; // Getter/setter required.
}

<managed-bean>
    <managed-bean-name>bean1</managed-bean-name>
    <managed-bean-class>com.example.Bean1</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

<managed-bean>
    <managed-bean-name>bean2</managed-bean-name>
    <managed-bean-class>com.example.Bean2</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>bean1</property-name>
        <value>#{bean1}</value>
    </managed-property>
</managed-bean>

参照:

于 2010-01-24T12:47:14.727 に答える
4

BalusC の回答に追加するには、依存性注入フレームワーク (Spring、Guice など) を使用している場合、または JSF 2.0 を使用している場合は、次の方法でマネージド Bean を別のマネージド Bean に設定できます。

@Inject
private Bean2 bean2;

(または、DI フレームワークに基づく適切な注釈)

于 2010-01-24T15:01:50.833 に答える