我有一个ICEFaces我们申请。一个页面有两个bean,它们在页面上显示不同的内容。
我希望能够在另一个bean更改bean上的内容时通知一个bean,以便第一个bean在页面上更新其内容。
ICEFaces有可能吗?如果是这样的话?
谢谢,
担
答案 0 :(得分:5)
你可以做的是将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");
答案 1 :(得分:3)
正如已经指出的那样,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的功能,您可以使用它。查看他们的文档以获取更多信息。
答案 2 :(得分:0)
我打算发布一些我自己作品的例子,但是ICEFaces blog上的人已经有了一个非常好的博客文章。看一看。