当我的网络应用程序从我的ProductsBean
到达构造函数时崩溃了。
我收到此错误:Can't instantiate class: beans.ProductsBean
这是我的ProductsBean
:
@ManagedBean
@ViewScoped
public class ProductsBean implements Serializable {
private List<ProductBean> products;
@ManagedProperty(value = "#{applicationBean}")
private ApplicationBean applicationBean;
private ProductBean selectedProduct;
public ProductsBean() {
Store store = applicationBean.getStore();
for (String c : store.getCategories()) {
for (Product p : store.getProductsOfCategory(c)) {
products.add(new ProductBean(p.getProduct_id(), p.getDescription(), p.getPrice(), p.getCategoryName()));
}
}
此错误的原因是什么?
答案 0 :(得分:3)
applicationBean
在构造函数中为null。
在处理托管bean时,尽可能使构造函数保持愚蠢(并且不要在那里使用托管属性)。逻辑涉及那些应该在@PostConstruct
方法中,框架将在托管属性更新后执行它。
@PostConstruct
private void init(){
Store store = applicationBean.getStore();
for (String c : store.getCategories()) {
for (Product p : store.getProductsOfCategory(c)) {
products.add(new ProductBean(p.getProduct_id(), p.getDescription(), p.getPrice(), p.getCategoryName()));
}
}
}
此外,您需要托管属性的设置器
public void setApplicationBean(ApplicationBean applicationBean) {
this.applicationBean = applicationBean;
}