2014-04-17 2 views
0

Java 6 EE를 배우고 있으며 간단한 웹 응용 프로그램이 있습니다.관리 속성을 사용할 때 Cant 인스턴스화 클래스

UserBean 클래스는 CurrencyManager 클래스를 사용합니다. CurrencyManager은 응용 프로그램 범위이며 관리 빈입니다. 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를 만든 이유입니다. 항상 ApplicationScoped를 사용해야했기 때문입니다.

나는에 인스턴스 (UserBean 생성자의 첫 번째 줄) 및 변경 신고 제거하는 경우 : UserBeanownedMoney 속성 NullPointerException의 근본 원인으로 javax.servlet.ServletException: Cant instantiate class: model.UserBean.을 던졌습니다 쿼리

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

다음 첫 페이지를.

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

당신은 내가 잘못 뭘하는지 말해 줄 수 : 여기, currencyManagergetCurrency를 호출 할 때 글래스 피쉬 로그는 NullPtr이 UserBean 생성자에서 발생하는 것으로 나타났다?

답변

0

나는 이클립스 브라우저를 사용해 보면 파이어 폭스 (실제로는 리눅스에서 icedove)를 사용하면 우연히 같은 문제를 발견하고 우연히 발견된다. .

이렇게해도 나에게 의미가 없지만 다른 브라우저로 이미 시도해 보셨습니까?

관련 문제