【发布时间】:2013-10-04 09:43:07
【问题描述】:
我在 @ApplicationScoped 中有一个带有全局数据列表的 bean,如下所示:
@ApplicationScoped
@ManagedBean
public class GlobalData
{
private List data = new ArrayList();
//getter and setterss goes here..
public void addSomeData(Object item) { data.add(item); }
}
我还有一个 @ViewScoped bean,它通过 @ManagedProperty 引用 GlobalData,如下所示:
@ManagedBean
@ViewScoped
public class SomePageController
{
@ManagedProperty(value="#{globalData}"
private GlobalData theGlobalData;
//also public getter and setter of theGlobalData
}
有趣的事情是在 SomePageController 中我想像这样向 GlobalData 列表中添加一个项目:
public void someUIAction()
{
SomeItem item = bussinesProcess();
theGlobalData.addSomeData( item );
}
因为每次调用 someUIAction 时,GlobalData 都会指向一个全新的实例,其中包含一个空数据!!!!我可以确认这一点,因为我添加了一些这样的登录信息:
public void someUIAction()
{
SomeItem item = bussinesProcess();
theGlobalData.addSomeData( item );
System.out.println(theGlobalData.toString());
}
然后我得到以下输出:
com.myproyect.beans.GlobalData@3c76da81
com.myproyect.beans.GlobalData@19c1818a
com.myproyect.beans.GlobalData@9a7jp79c
......
每个请求都有一个新实例,我用谷歌搜索,但我能得到的唯一信息是 this guy 有类似的问题,但我也尝试了他的解决方案,但没有运气 =(。
** 附加信息**: 我正在使用 TomEE 1.5.2 Web 配置文件进行开发,其中包括 Apache MyFaces 我还检查了所有注释都来自 javax.faces.bean 包
【问题讨论】:
标签: jsf-2 myfaces managed-property apache-tomee