java - JSF 2.0 : Why object in my list (except the last one) cannot be updated

标签 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 {
    ...
    private List<Partner> listOfPartners;
    ...
}

在 ViewCart.xhtml 页面中,我列出了如下项目:

...
<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>
...

这是我的 ManagedBean:

@ManagedBean
@SessionScoped
public class CartManagedBean {
    ...
    private Cart cart;
    ...
}

所有的 getter 和 setter 方法都已正确完成。因此,我希望当我点击更新按钮时,相应项目的数量会更新。但是,当我测试该功能时,只能更新列表中的最后一项。

如果有人可以就如何解决这个问题给我建议,我将不胜感激。

更新:我设法通过将 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>

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

<h:inputText id="quantity#{i.id}" size="3" value="#{i.quantity}" />

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

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

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

如果有人能为我进一步解释这一点,我将非常感激,这样我就不会再犯同样的错误 =)。

最佳答案

您似乎在使用 Mojarra。 <ui:repeat>totally broken在莫哈拉。我什至可以在最新的 Mojarra 2.1.4 上重现您的问题。然而,它在使用 MyFaces 2.1.3 时 100% 有效。 .我已将其报告给 Mojarra 人员 issue 2243 .

您有 3 个选择:

  • 用 MyFaces 替换 Mojarra。
  • 使用<c:forEach>而不是 <ui:repeat> .这仅适用于 <c:forEach>不是自己在一些UIData里面组件。
  • 使用UIData组件而不是 <ui:repeat> .

关于java - JSF 2.0 : Why object in my list (except the last one) cannot be updated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8078503/

相关文章:

list - 如何检查一个数字是否在列表中的另一个数字之前

list - 在 Haskell 元组列表上压缩相同的值

jsf - 是否可以禁用 f :event type ="preRenderView" listener on postback?

jsf-2 - 仅当特定 h :message is being displayed 时才显示 JSF 元素

Java - 正则表达式 - 删除注释

java - 即使我使用的是默认已经支持maven的eclipse juno版本,是否有必要在linux环境中安装maven?

java - 隐藏 SD 卡为只读

java - 如何动态地将 android xml 布局作为参数传递给自定义数组适配器类

c++ - 使用 C++ 迭代器访问元素

jsf-2 - &lt;meta http-equiv ="X-UA-Compatible"content ="IE=8"/> 在 RichFaces webapp 中被忽略