2013-09-28 33 views
2

我有全局數據的@ApplicationScoped像這樣的列表一個bean:不一致之處@ManagedProperty

@ApplicationScoped 
@ManagedBean 
public class GlobalData 
{ 
    private List data = new ArrayList(); 

    //getter and setterss goes here.. 

    public void addSomeData(Object item) { data.add(item); } 
} 

也對我有@ViewScoped豆,通過這樣的@ManagedProperty引用全球國際:

@ManagedBean 
@ViewScoped 
public class SomePageController 
{ 
    @ManagedProperty(value="#{globalData}" 
    private GlobalData theGlobalData; 
    //also public getter and setter of theGlobalData 
} 

有趣的進來SomePageController當我要增加一個項目到全球國際的這樣的名單:

public void someUIAction() 
{ 
    SomeItem item = bussinesProcess(); 
    theGlobalData.addSomeData(item); 
} 

因爲每次調用某個UIAction時,GlobalData都會指向一個全新的實例,並顯示一個空的數據!我可以證實這一點,因爲我增加了一些像這樣的洛信息:

public void someUIAction() 
{ 
    SomeItem item = bussinesProcess(); 
    theGlobalData.addSomeData(item); 
    System.out.println(theGlobalData.toString()); 
} 

,然後我得到了以下的輸出:

[email protected] 
[email protected] 
[email protected] 
...... 

在每次請求一個新的實例,我用Google搜索,但我的唯一信息得到的是this guy類似的問題,還是我也嘗試他沒有運氣的解決方案=(

** aditional的信息**: IM與TomEE 1.5.2網絡配置文件至極發展包括Apache的MyFaces的 還我檢查了所有的anotations來自javax.faces.bean包

回答

1

如果導入@ApplicationScoped註釋從錯誤的包,如CDI的javax.enterprise.context,這是大多數IDE建議作爲第一個自動完成選項,會發生。由於您通過JSF的@ManagedBean管理bean,因此您需要確保您也使用來自同一個Bean管理API的託管bean範圍。

import javax.faces.bean.ApplicationScoped; 
import javax.faces.bean.ManagedBean; 

當一個JSF託管bean沒有一個有效的註釋definied,則默認爲@NoneScoped這是在這種特殊情況下確實是在每個EL-分辨率的品牌新的實例,如@ManagedProperty

+0

添加了一個+1,因爲它是一個相當常見的錯誤,但我只是檢查了所有的anontations,它們都來自javax.faces.bean包,老實說我希望這是原因... = S – Harima555