Jsf总是从ArrayList中删除最后一个元素

时间:2012-02-03 09:48:58

标签: jsf ajax4jsf immediate-attribute

我在一个支持bean中有一个ArrayList,并在JSF页面中使用c:forEach进行渲染。当iI通过索引删除ArrayList元素时,jsf,无论索引是什么,总是删除最后一个元素。为什么会这样?

JSF中的删除按钮是:

<a4j:commandButton immediate="true" action="#{bean.removeEntry}" ...

所以我使用立即属性。我认为问题是因为在JSF生命周期中立即跳过应用请求阶段。有可能吗?

如果是,那么在这种情况下如何运行应用请求阶段?

3 个答案:

答案 0 :(得分:1)

您使用的是Facelets(.xhtml页面)吗?如果是这样,您可能会遇到一些关于JSTL标记的常见误解,例如<c:foreach>。这是一篇很好的文章:

http://www.ninthavenue.com.au/blog/c:foreach-vs-ui:repeat-in-facelets

基本上,<c:foreach>仅在最初构建视图时处理;它不会成为组件树的一部分,并且在更改后备集合时可能会有一些您不期望的行为。您可能最好使用<ui:repeat>代替。

答案 1 :(得分:0)

更多的代码会有所帮助,但是立即执行命令按钮基本上用于导航离开当前页面,因为actionlistener或action将在应用请求阶段执行,典型的案例取消按钮。这意味着您将无法获得更新的价值。 如果你的逻辑依赖于其他一些uiinput立即生成,你可以在valuechangelistener中挂钩。

但是我怀疑你想要实现的目标可以更好地完成,看看这个link @ SO

答案 2 :(得分:0)

我遇到了类似的问题。我正在使用&#39; tr:iterator&#39;迭代ArrayList&#39;&lt;&#39; Customer&#39;&gt;&#39;(); &#39;用户界面:重复&#39;解决了我的问题。 感谢。