首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ManagedBean和PropertyChangeListener

ManagedBean和PropertyChangeListener
EN

Stack Overflow用户
提问于 2013-03-24 17:52:33
回答 1查看 662关注 0票数 1

我有两个ManagedBeans (@SessionScoped@ViewScoped):

代码语言:javascript
复制
@ManagedBean(name="sessionController")
@SessionScoped
public class SessionController implements Serializable{    
    private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.addPropertyChangeListener(listener);
    }

    ...
}

@ManagedBean(name="viewController")
@ViewScoped
public class ViewController implements Serializable, PropertyChangeListener{  
    @ManagedProperty(value="#{sessionController}")
    private SessionController sessionController ;  
    ...

    @PostConstruct
    public void init() {
        sessionController.addPropertyChangeListener(this);
    }


    @Override
        public void propertyChange(PropertyChangeEvent evt) {
            ...
        }

    }

我可以在ViewController中使用PropertyChangeListener来了解SessionController中的更改吗?会有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-27 00:01:55

不,您不能。要向@SessionScoped bean添加PropertyChangeSupport,您需要调用

代码语言:javascript
复制
   propertyChangeSupport.addPropertyChangeListener("instanceofViewScopedBean")     

在一个方便的地方(最好是@PostConstructor)。请注意,您需要将目标bean的实际实例(实现PropertyChangeListener)传递给addPropertyChangeListener。据我所知,您不能从会话bean中获得它,特别是在bean初始化时。为什么?它是视图作用域,它只存在于页面被查看的时间。

与此限制相关的是JSF策略,即托管bean只能注入到范围较窄的其他bean中(在您的情况下,只有会话bean才能注入到视图范围内的bean中)。您要做的事情与此完全相反,即将视图范围内的bean绑定到会话范围内的变量。

我假设您正在尝试实现一种低成本的服务器端推送机制。嗯,除了好的投票或彗星推送之外,我不知道还有什么方法可以做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15597059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档