在 ICEFaces 中通知一个 bean
Posted
技术标签:
【中文标题】在 ICEFaces 中通知一个 bean【英文标题】:Notifying one bean from another in ICEFaces 【发布时间】:2010-11-24 11:03:13 【问题描述】:我有一个我们申请的 ICEFaces。一页有两个 bean,它们在页面上显示不同的内容。
我希望能够在另一个 bean 更改 bean 上的某些内容时通知一个 bean,以便第一个 bean 更新其在页面上的内容。
这在 ICEFaces 中可行吗?如果有怎么办?
谢谢,
谭
【问题讨论】:
【参考方案1】:我打算发布一些我自己的工作示例,但ICEFaces blog 上的人已经有了自己的非常好的博客文章。看看吧。
【讨论】:
【参考方案2】:如前所述,JSF 也可以进行简单的注入。在你的 faces-config.xml 文件中有这样的东西:
<managed-bean>
<managed-bean-name>bean1</managed-bean-name>
<managed-bean-class>org.icefaces.sample.Bean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>bean2</managed-bean-name>
<managed-bean-class>org.icefaces.sample.Bean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>bean1</property-name>
<value>#bean1</value>
</managed-property>
</managed-bean>
至于当 bean 值改变时更新用户界面,可以通过定期的客户端与页面交互来触发。但是,如果您正在执行协作类型的应用程序(其中一个用户的更改可以更新其他用户可以看到的值),那么 ICEfaces 有一个您可以使用的称为 Ajax Push 的功能。查看他们的文档了解更多信息。
【讨论】:
【参考方案3】:您可以做的是将 bean1“注入”到 bean2 中,这样 bean2 就可以访问 bean1 中存在的任何方法。
如果您使用的是 Spring,则在定义 bean 时可以轻松完成:
<bean id="bean1" class="foo.bar.Bean1"/>
<bean id="bean2" class="foo.bar.Bean2">
<property id="bean1" ref="bean1"/>
</bean>
在 bean2 的 Java 代码中:
public class Bean2
private Bean1 bean1 = null;
// The setter will be used by Spring to inject Bean1 in Bean2...
public void setBean1(Bean1 bean1)
this.bean1 = bean1;
...
public void someMethod()
...
// Now, you can call the bean1 instance to update what you want...
bean1.updateSomething();
如果您不使用 Spring:
您可以像这样在 bean2 代码中直接访问 bean1 实例:
Bean1 bean1 = (Bean1) FacesContext.getCurrentInstance().getCurrentInstance()
.getExternalContext().getSessionMap().get("bean1");
【讨论】:
以上是关于在 ICEFaces 中通知一个 bean的主要内容,如果未能解决你的问题,请参考以下文章