【发布时间】:2013-01-02 16:44:30
【问题描述】:
我有两个 ManagedBeans。
关于我的问题,他们做了以下事情:
第一:
@ManagedBean
public class Provider {
private Event<ProvideEvent> event;
private static boolean handling = false;
public provide(@Observes ConsumeEvent consume){
if(!handling){
//provide some stuff
event.fire(new ProvideEvent(ProvidedStuff stuff);
}
}
}
第二:
@ManagedBean
@SessionScoped
public class Consumer {
private Event<ConsumeEvent> event;
@PostConstruct
public void initialize(){
event.fire(new ConsumeEvent());
}
private static boolean handling = false;
public consume(@Observes ProvideEvent providedStuff){
if(!handling){
//use the provided stuff
}
}
}
当网站被调用时,会发生这种情况: 1.消费者被实例化。 2. 消费者触发事件。 3. Provider 被实例化。 4. 调用provide()。 5. 一个新的消费者被实例化 6. 调用 consumer()。
如您所见,我必须使用布尔“处理”来防止应用程序无限循环。
为什么容器不使用实例化的 SessionScoped ManagedBean?我认为 SessionScoped ManagedBeans 就像 Session 的 Singleton? 我想我可以通过以下方式解决这个问题: A: 使用静态变量来改变属性。 B:手动实现观察者模式。
但是这里必须有更简单的方法!?
【问题讨论】:
标签: java jakarta-ee observer-pattern managed-bean session-scope