Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF2.0:为什么我的列表中的对象(最后一个除外)不能更新_Java_List_Jsf 2 - Fatal编程技术网

Java JSF2.0:为什么我的列表中的对象(最后一个除外)不能更新

Java JSF2.0:为什么我的列表中的对象(最后一个除外)不能更新,java,list,jsf-2,Java,List,Jsf 2,在我的代码中,我有以下对象来实现购物车: public class CartItem { ... public int id; public int quantity; ... } public class Partner { ... public List<CartItem> listOfItems; ... } public class Cart implements Serializable { ...

在我的代码中,我有以下对象来实现购物车:

public class CartItem {
    ...
    public int id;
    public int quantity;
    ...
}

public class Partner {
    ...
    public List<CartItem> listOfItems;
    ...
}

public class Cart implements Serializable {
    ...
    private List<Partner> listOfPartners;
    ...
}
所有getter和setter方法都已正确完成。因此,我希望当我单击update按钮时,相应项目的数量将被更新。但是,当我测试函数时,只能更新列表中的最后一项

如果有人能给我一个如何解决这个问题的建议,我将不胜感激

更新:我通过将
ui:repeat
替换为
h:dataTable
成功地实现了这一功能。我认为我对
ui:repeat
的了解应该是错误的。当我使用
ui:repeat
时,我看到生成的HTML类似于:

<form>
    ...
    <input type="submit" id="jdt:51;jdt52" />
    ...
</form>
<form>
    ...
    <input type="submit" id="jdt:51;jdt52" />
    ...
</form>
<form>
    ...
    <input type="submit" id="jdt:51;jdt52;quantity203" />
    ...
</form>
<form>
    ...
    <input type="submit" id="jdt:51;jdt52;quantity203" />
    ...
</form>

...
...
...
...
换句话说,所有项目都是使用相同的ID生成的。我甚至试图通过将每个项目的唯一ID附加到输入的ID中,使数量输入的ID唯一,如下所示:

...
<ui:repeat value="#{cartManagedBean.cart.listOfPartners}" var="p">
    <ui:repeat value="#{p.listOfItems}" var="i">
        <h:form>
            ...
            <h:inputText size="3" value="#{i.quantity}" />

            <h:commandButton value="Update" />
            ...
        </h:form>
    </ui:repeat>
</ui:repeat>
...
<h:inputText id="quantity#{i.id}" size="3" value="#{i.quantity}" />

但是,在HTML结果中,我看到ID类似于:

<form>
    ...
    <input type="submit" id="jdt:51;jdt52" />
    ...
</form>
<form>
    ...
    <input type="submit" id="jdt:51;jdt52" />
    ...
</form>
<form>
    ...
    <input type="submit" id="jdt:51;jdt52;quantity203" />
    ...
</form>
<form>
    ...
    <input type="submit" id="jdt:51;jdt52;quantity203" />
    ...
</form>

...
...
...
...
换句话说,对所有后续项目重复第一个项目的ID。尽管我还没有完全理解如何用新值更新变量,但我认为这就是为什么只能更新最后一项的原因


如果有人能为我进一步解释一下,这样我就不会再犯同样的错误了,我将不胜感激。

你似乎在使用莫哈拉。
在莫哈拉。我甚至可以在最新的Mojarra 2.1.4上重现您的问题。但是,当使用时,它可以100%工作。我已经向莫哈拉的人报告了

您有3种选择:

  • 用MyFaces替换Mojara
  • 使用
    而不是
    。只有当
    本身不在某些
    UIData
    组件中时,这才有效
  • 使用
    UIData
    组件而不是

    • 你好像在用莫哈拉。
      在莫哈拉。我甚至可以在最新的Mojarra 2.1.4上重现您的问题。但是,当使用时,它可以100%工作。我已经向莫哈拉的人报告了

      您有3种选择:

      • 用MyFaces替换Mojara
      • 使用
        而不是
        。只有当
        本身不在某些
        UIData
        组件中时,这才有效
      • 使用
        UIData
        组件而不是

      这里,你在调用什么方法吗?@BheshGurung:不,我没有在这里调用任何方法。我只想更新变量而不做任何额外的事情。
      这里,你在调用某个方法吗?@BheshGurung:不,我在这里没有调用任何方法。我只想在不做任何额外事情的情况下更新变量。和往常一样,我认为你正好解决了我的问题。我现在确实在使用Mojarra。然而,对我来说改变已经太晚了。我昨天刚刚提交了我的项目。我会在以后的项目=]中注意到这一点。和往常一样,我认为您解决了我的问题。我现在确实在使用Mojarra。然而,对我来说改变已经太晚了。我昨天刚刚提交了我的项目。我将在将来的项目=]中注意到这一点。