我在Seam中注入组件时遇到了很多麻烦。
当某个用户在我的应用程序中执行某些操作时,我希望将一个事件传播给当前记录的许多其他用户(接收该事件的用户将由导致该事件触发的用户决定。)< / p>
我接近这个的方法是在Application范围中创建一个对象,其中HashMap故事是针对用户id的有状态会话bean。
当触发事件时,Application-scoped对象中的observer方法运行并在hashmap中的每个bean上调用一个方法(作为参数传递一个实体bean)。
在每个bean上调用的方法中,我需要访问一些注入的方法来验证“bean的用户”是否应该对该事件做出反应(通过显示来自实体bean的一些数据)。为此,我需要访问一些注入的bean(SFSB和无状态bean),但此时它们都是null。
我的理解是这里可以使用Component.getInstance()(包装在Lifecycle.beginCall()/ .endCall()块中)或其中一个类似的方法来检索对象,但是这不起作用。 / p>
如果我要做类似(StoryManagerAction)Component.getInstance(“storyManagerAction”)的事情,其中storyManagerAction是一个有状态会话bean,我希望返回当前驻留在会话中的名为storyManagerAction的StoryManager实例。相反,我得到一个StoryManagerAction实例,其所有原始成员都设置为0,其所有对象成员都设置为null。
知道为什么会发生这种情况以及我需要做些什么才能使其正常工作?
答案 0 :(得分:1)
迭代Map并在每个StoryManagerAction
上调用方法时,注入的内容是相对于引发事件的会话的范围,而不是StoryManagerAction
bean所属的会话范围
避免在StoryManagerAction
中注入并在@Create
带注释的方法中解析所有需要的bean,您将在常规实例变量中保存该值。