2014-04-17 22 views
0

我正在學習Java 6 EE,並且我有一個簡單的Web應用程序。我的UserBean類使用CurrencyManager類。 CurrencyManager是應用程序作用域,是一個託管bean。 UserBean是託管bean和會話範圍。使用託管屬性時無法實例化類

這裏是我的UserBean

@ManagedBean 
@SessionScoped 
public class UserBean implements Serializable{ 
    private String username; 
    private ArrayList<Money> ownedMoney; 

    private CurrencyManager currencyManager; 
    private BigDecimal credits; 

    public UserBean() { 
     currencyManager = new CurrencyManager(); 
     username = "User"; 
     ownedMoney = new ArrayList<>(); 
     ownedMoney.add(new Money(new BigDecimal(15000), currencyManager.getCurrency("CZK"))); 
     ownedMoney.add(new Money(new BigDecimal(100), currencyManager.getCurrency("USD"))); 
     credits = new BigDecimal(150); 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public BigDecimal getCredits() { 
     return credits; 
    } 

    public void setCredits(BigDecimal credits) { 
     this.credits = credits; 
    } 

    public ArrayList<Money> getOwnedMoney() { 
     return ownedMoney; 
    } 

    public void setOwnedMoney(ArrayList<Money> ownedMoney) { 
     this.ownedMoney = ownedMoney; 
    } 

    public CurrencyManager getCurrencyManager() { 
     return currencyManager; 
    } 

    public void setCurrencyManager(CurrencyManager currencyManager) { 
     this.currencyManager = currencyManager; 
    } 
} 

在這裏,我CurrencyManager

@ManagedBean(name = "currencyManager") 
@ApplicationScoped 
public class CurrencyManager { 
    private HashMap<String, Currency> currencies; 

    public CurrencyManager() { 
     this.currencies = new HashMap<>(); 
     currencies.put("CZK", new Currency("CZK", new BigDecimal("0.0503"))); 
     currencies.put("GBP", new Currency("GBP", new BigDecimal("0.59"))); 
     currencies.put("EUR", new Currency("EUR", new BigDecimal("1.38"))); 
     currencies.put("USD", new Currency("USD", new BigDecimal("1.0"))); 
    } 

    public Currency getCurrency(String name){ 
     return currencies.get(name); 
    } 

    public java.util.Collection<Currency> getCurrencies() { 
     return currencies.values(); 
    } 

    public void setCurrencies(HashMap<String, Currency> currencies) { 
     this.currencies = currencies; 
    } 
} 

我張貼的作品罰款是代碼。但是我不想在我的UserBean類中實例化CurrencyManager - 這就是爲什麼我將其設爲ApplicationScoped的原因,因爲它應該始終可用。

如果我刪除實例化(在UserBean構造第一線)和改變聲明:

@ManagedProperty(value = "#{currencyManager}") 
private CurrencyManager currencyManager; 

然後,查詢在UserBeanownedMoney財產與NullPointerException根源拋出javax.servlet.ServletException: Cant instantiate class: model.UserBean.的第一頁。 GlassFish的日誌表明,NullPtr在UserBean構造時,當我打電話getCurrencycurrencyManager,在這裏:

ownedMoney.add(new Money(new BigDecimal(15000), currencyManager.getCurrency("CZK"))); 

你能告訴我什麼,我做錯了什麼?

回答

0

我剛碰到同樣的問題,偶然發現它不工作,如果我嘗試用firefox(實際上是在linux下icedove),但工作正常,如果我嘗試使用eclipse內置瀏覽器。

即使如此,這對我來說沒有任何意義,您是否嘗試過使用不同的瀏覽器?

相關問題