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。然而,对我来说改变已经太晚了。我昨天刚刚提交了我的项目。我将在将来的项目=]中注意到这一点。