-1

my からコンストラクターに到達すると、Web アプリケーションがクラッシュします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()));
            }
        }

このエラーの原因は何ですか?

4

1 に答える 1

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;
}
于 2013-01-04T14:54:51.827 に答える