【问题标题】:Communication between two beans两个bean之间的通信
【发布时间】:2014-03-16 23:38:54
【问题描述】:
我在一个页面上有两个区域和两个任务流。在第一个任务流中,管理 bean 在页面流范围内,而在第二个任务流中,它在支持 bean 范围内。我的要求是我想从第二个 bean 中调用一个 bean 的方法,反之亦然。
例如:在第一个 jsff 上,如果发生某些动作,那么它的动作将转到它的 bean,从那里我需要调用第二个 bean 的方法,反之亦然。
我怎样才能做到这一点?
由于两个任务流将同时运行,所以我需要获取正在运行的 bean 实例,以便获取当前状态/值 UI 组件。
【问题讨论】:
标签:
jsf
communication
oracle-adf
managed-bean
【解决方案1】:
所有你需要做的就是注入你想在另一个 bean 中使用其方法的 bean。在 ADF 中,有一种简单的方法可以实现这一点。您的 WEB-INF 文件夹中应该有一个名为 adfc-config.xml 的文件。如果您打开它的源代码,您会注意到每个 bean 都在 <managed-bean> 标记中进行了描述。它会是这样的:
<managed-bean id="__2">
<managed-bean-name>bean1</managed-bean-name>
<managed-bean-class>com.domain.Bean1</managed-bean-class>
<managed-bean-scope>view</managed-bean-scope>
</managed-bean>
对于每个 bean。您必须在其中插入一个 <managed-property> 标记,其中包含您要注入的 bean 的引用,就像这样:
<managed-bean id="__2">
<managed-bean-name>bean1</managed-bean-name>
<managed-bean-class>com.domain.Bean1</managed-bean-class>
<managed-bean-scope>view</managed-bean-scope>
<managed-property>
<property-name>bean2</property-name>
<value>#{Bean2}</value>
</managed-property>
</managed-bean>
另外,在 Bean1 类中你必须创建一个 Bean2 的实例变量,然后你可以使用它来获取它的当前状态。