我在一个支持bean中有一个ArrayList
,并在JSF页面中使用c:forEach
进行渲染。当iI通过索引删除ArrayList
元素时,jsf,无论索引是什么,总是删除最后一个元素。为什么会这样?
JSF中的删除按钮是:
<a4j:commandButton immediate="true" action="#{bean.removeEntry}" ...
所以我使用立即属性。我认为问题是因为在JSF生命周期中立即跳过应用请求阶段。有可能吗?
如果是,那么在这种情况下如何运行应用请求阶段?
答案 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;解决了我的问题。 感谢。