Не могу создать экземпляр класса при использовании управляемого свойства
Я изучаю Java 6 EE, и у меня есть простое веб-приложение.
я имею UserBean
класс, который использует CurrencyManager
учебный класс. CurrencyManager
является областью применения и является управляемым компонентом. UserBean
Управляемый компонент и область действия сеанса.
Вот мой 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;
}
}
Код, который я разместил, работает нормально, как есть. Однако я не хочу создавать экземпляры CurrencyManager
в моем UserBean
класс - вот почему я сделал это ApplicationScoped, так как он должен быть доступен всегда.
Если я удаляю экземпляр (первая строка в UserBean
конструктор) и измените объявление на:
@ManagedProperty(value = "#{currencyManager}")
private CurrencyManager currencyManager;
тогда первая страница, которая запрашивает ownedMoney
недвижимость в UserBean
бросает javax.servlet.ServletException: Cant instantiate class: model.UserBean.
с коренной причиной NullPointerException
, Журнал GlassFish показал, что NullPtr происходит в UserBean
конструктор, когда я звоню getCurrency
на currencyManager
, Вот:
ownedMoney.add(new Money(new BigDecimal(15000), currencyManager.getCurrency("CZK")));
Можете ли вы сказать мне, что я делаю не так?
1 ответ
Я только что столкнулся с той же проблемой, и случайно обнаружил, что она не работает, если я пытаюсь с Firefox (на самом деле icedove под Linux), но хорошо работает, если я пытаюсь использовать встроенный браузер eclipse.
Несмотря на это, это не имеет смысла для меня, вы уже пробовали с другими браузерами?