JSF の管理対象コンポーネント間でデータを渡すことは実際に可能ですか? はいの場合、これを達成する方法は?
誰でもサンプルを提供できますか?
JSF の管理対象コンポーネント間でデータを渡すことは実際に可能ですか? はいの場合、これを達成する方法は?
誰でもサンプルを提供できますか?
いくつかの方法があります。管理対象のBeanが相互に関連している場合、最もクリーンな方法はインジェクションです。JSFのバージョンとCDIが利用可能かどうかによって、さまざまな方法があります。
を使用するだけ@Inject
です。
@Named
@SessionScoped
public class Bean1 {
// ...
}
@Named
@RequestScoped
public class Bean2 {
@Inject
private Bean1 bean1; // No getter/setter needed.
}
他の方法でも可能ですが、CDIはプロキシのカバーの下に挿入するため、スコープは重要ではありません。
を使用し@ManagedProperty
ます。
@ManagedBean
@SessionScoped
public class Bean1 {
// ...
}
@ManagedBean
@RequestScoped
public class Bean2 {
@ManagedProperty("#{bean1}")
private Bean1 bean1; // Getter/setter required.
}
この特定の例では、JSFがプロキシインスタンスではなく物理インスタンスを注入するため、他の方法は不可能です。同じスコープまたはより広いスコープのBeanのみを特定のスコープのBeanに注入できます。
で使用<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>
BalusC の回答に追加するには、依存性注入フレームワーク (Spring、Guice など) を使用している場合、または JSF 2.0 を使用している場合は、次の方法でマネージド Bean を別のマネージド Bean に設定できます。
@Inject
private Bean2 bean2;
(または、DI フレームワークに基づく適切な注釈)