在ICEFaces中通知另一个bean

时间:2009-08-31 20:27:39

标签: jsf icefaces

我有一个ICEFaces我们申请。一个页面有两个bean,它们在页面上显示不同的内容。

我希望能够在另一个bean更改bean上的内容时通知一个bean,以便第一个bean在页面上更新其内容。

ICEFaces有可能吗?如果是这样的话?

谢谢,

3 个答案:

答案 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上的人已经有了一个非常好的博客文章。看一看。