【问题标题】:Getter / Setter for List列表的获取器/设置器
【发布时间】:2010-11-03 15:44:47
【问题描述】:

我有一种方法:

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

在 JSF 页面中,我使用此方法在 h:dataTable 中显示数据

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

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

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

大家可以对这个问题和我的公式有什么想法吗?

谢谢

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

编辑

我在 backin bean 中的 List Cart 方法

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

cartDAO 是无状态会话 Bean,它执行 getResultList where 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);
        }
     }

如何获取列表中的旧数量和列表中的新数量?

【问题讨论】:

    标签: jsf ejb-3.0


    【解决方案1】:

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

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

    因此,您不应该将其设计为:

    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";
    }
    

    【讨论】:

    • 嗨 BalusC,我没有将 getResultList 放在 postconstruct 或 constructor 中,我已经编辑了我的问题,你可以检查一下。谢谢
    • 谢谢 BalusC!但我怎样才能在其他列表中仍然旧数量?我需要为这个问题提出新问题吗?因为库存数量等于当前库存 + 旧数量 - 新数量
    • 我不太了解你。通常,当您将模型属性绑定到输入组件并编辑值时,JSF 将已经更新模型值。此外,在您更新的代码中,您仍然在 getter 中从数据库中重新加载列表,从而覆盖提交的值。
    • 我知道!谢谢!但是您有更新购物车的解决方案吗?我的解决方案我认为这是不可能的,因为无法获得旧值!
    • 我可以通过 getUserCart() 的使用循环获得 oldQuantity
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多