我有一种方法:
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);
}
}
我怎样才能获得列表上的旧数量和列表上的新数量?
答案 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";
}