1

リストが維持されるステートフル セッション Bean があります。

@Stateful
public class CartDAO{

    private List<ShoppingCart> tempCart;
    public void add(ShoppingCart shoppingCart){
        tempCart.add(shoppingCart);
    }

    public List<ShoppingCart> getCart(){
        return tempCart;
    }

    @PostConstruct
    public void init(){
        tempCart = new ArrayList<>();
    }
}

カートに追加する Controller1:

@Named
@SessionScoped
public class Controller1 implements Serializable {
        @EJB
        CartDAO cartDao;
        public String addToShoppingCart() {
        cartDao.add(shoppingCart);
        }
}

では、別のカートからリストに追加されたアイテムを取得できますか?

 @Named
    @SessionScoped
    public class Controller2 implements Serializable {
            @EJB
            CartDAO cartDao;
            public String getShoppingCart() {
            System.out.println(cartDao.getCart());//returns null
            }
    }

明らかに、上記のコードは null を返します。

別のコントローラーからリストを取得するにはどうすればよいですか。どんな助けでも大歓迎です。

4

1 に答える 1

1

ここには明らかな間違いは見当たりません (Controller2#getShoppingCart()アイテムを追加する前に電話をかけないでCartDAOよろしいですか?) が、ここに私の考えをいくつか示します。

  • CartDAOいくつかのインターフェースを実装するか、それを作成する必要があります@LocalBean
  • すべてのステートフル Bean にはメソッド アノテーションが付けられて@Removeいる必要があるため、Bean で使用されているリソースをクリーンアップでき (データソースと息子を閉じます)、Bean はこの呼び出し後にメモリから削除されます。
  • @Injectの代わりにどこでも使用することが推奨されるようになりまし@EJBた。これは同じです (@EJBリモート Bean を注入する場合にのみ使用する必要があります)。

また、System.out.println(cartDao.getCart());が null を返す場合は、@PostConstruct呼び出されていないことを意味しますが、これは奇妙です。コンテナと環境についてもう少し情報を提供できますか?インポートも表示してください。これは間違いの大きな原因です。

于 2013-10-02T12:05:32.483 に答える