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
생성자의 첫 번째 줄) 및 변경 신고 제거하는 경우 : UserBean
에 ownedMoney
속성 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")));
당신은 내가 잘못 뭘하는지 말해 줄 수 : 여기, currencyManager
에 getCurrency
를 호출 할 때 글래스 피쉬 로그는 NullPtr이 UserBean
생성자에서 발생하는 것으로 나타났다?