Getter / Setter for List

时间:2010-11-03 15:44:48

标签: jsf ejb-3.0

我有一种方法:

public List<Car> getCart(){
 //do something
}

并在JSF Page i中使用此方法在h:dataTable

中显示数据

在视图中(JSF页面)我在h中有一个inputText:dataTable,例如h:dataTable我有2列是Cart Name和Quantity,而Quantity Quantity是inputText用于用户编辑item的数量。 我的问题是如何设置List dataType的值?因为我有更新购物车的公式:

Quantity of Cart Update = (Item In stock + old Quantity of each item) - new Quantity of each item

在公式中我可以获得项目instock,但我想知道每个项目的旧数量和每个项目的新数量,因为如果我得到每个项目的数量它将是新值。但现在我只得到每个项目的旧数量值,因为我不知道如何设置列表

每个人都可以对这个问题和我的公式有任何想法吗?

谢谢

===============================================

修改

我在Backin bean中的List Cart方法

public List<Cart> getUserCart(){
        int userid = getMemberLoginController().getUser().getUserid().intValue();
        return cartDAO.getUSerCart(userid);
    }

cartDAO是会话Bean无状态它getResultList其中userid =:userid。

和更新方法

 public void updateCart(){
        List<Cart> cartQuantity = getUserCart();
        int i = 0 ;
        for(Cart cartQuantityOnHand : cartQuantity){
            i = cartQuantityOnHand.getCartQuantity();
            int a =  i + cartQuantityOnHand.getItem().getInstock();
            System.out.println(i);
        }
     }

我怎样才能获得列表上的旧数量和列表上的新数量?

1 个答案:

答案 0 :(得分:1)

该列表不需要设置器。 JSF只会调用它的getter,然后在列表的每个项目上调用setter。

你的问题听起来好像你每次都在getter中加载列表而不是bean的构造函数或postconstruct。如果你在bean的action方法中通过getter获取列表,那么包含所有提交值的原始列表将被DB中的新列表覆盖。

所以,你不应该把它设计为:

public List<Item> getItems() {
    return em.createNamedQuery("Item.list", Item.class).getResultList();
}

public String submit() {
    for (Item item : getItems()) {
        em.persist(item);
    }
    return "outcome";
}

但您应该将其设计为:

private List<Item> items;

@PostConstruct
public void init() {
    items = em.createNamedQuery("Item.list", Item.class).getResultList();
}

public List<Item> getItems() { 
    return items;
}

public String submit() {
    for (Item item : items) {
        em.persist(item);
    }
    return "outcome";
}