Уведомление одного компонента от другого в ICEFaces - PullRequest
3 голосов
/ 01 сентября 2009

У меня есть приложение ICEFaces, которое мы используем. На одной странице есть два компонента, которые отображают на странице разные вещи.

Я хочу иметь возможность уведомлять один компонент, когда другой компонент изменяет что-либо в компоненте, чтобы первый компонент обновлял свое содержимое на странице.

Возможно ли это в ICEFaces? если да как?

Спасибо

Tam

Ответы [ 3 ]

5 голосов
/ 01 сентября 2009

Что вы можете сделать, это «внедрить» 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>

и в коде Java bean2:

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:

Вы можете напрямую получить доступ к экземпляру bean1 в коде bean2, например:

Bean1 bean1 = (Bean1) FacesContext.getCurrentInstance().getCurrentInstance()
    .getExternalContext().getSessionMap().get("bean1");
3 голосов
/ 01 сентября 2009

Как уже отмечалось, JSF также может выполнять простые инъекции. Примерно так в вашем файле face-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, которую вы можете использовать. Проверьте их документы для получения дополнительной информации.

0 голосов
/ 01 сентября 2009

Я собирался опубликовать несколько примеров моей собственной работы, но у парней в блоге ICEFaces уже есть действительно хороший блог. Посмотри.

...