我有两个 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. 调用 consume()。
如您所见,我不得不使用布尔“处理”来防止应用程序无限循环。
为什么容器不使用实例化的 SessionScoped ManagedBean?我认为 SessionScoped ManagedBeans 就像 Session 的 Singleton?我想我可以通过以下方式解决这个问题: A:对更改的属性使用静态变量。B:手动实现观察者模式。
但是这里必须有一个更简单的方法!?