我知道这看起来像很多文字,但我认为这是一个非常简单的概念我不知道。
我正在使用Facelets编写Web应用程序。我有一个自定义标记rq:request-list,它将请求列表作为参数输出并输出一个可爱的表来显示它们。到目前为止,非常好。
rq:请求列表就像你期望的那样开始:
<!-- ... -->
<ice:dataTable value="#{list}" var="req">
<ice:column>
<f:facet name="header">Date last edited</f:facet>
<ice:outputText value="#{req.dateModified}" />
</ice:column>
<!-- ... -->
结果很好。它甚至在表格中有一个链接来编辑请求。 YIPPEE!
<ice:column rendered="#{spokespersonView}">
<f:facet name="header">Edit</f:facet>
<h:commandLink value="Edit" action="edit_r" rendered="#{RequestSessionBean.mutable}">
<f:setPropertyActionListener target="#{RequestSessionBean.request}" value="#{req}"/>
</h:commandLink>
</ice:column>
在将支持bean中的请求设置为我们所在的表行所代表的请求之后,将我们带到编辑页面。这就是问题所在。它很微妙。
rq:请求列表在一个页面中多次使用;就这样:
<ui:repeat value="#{ExperimentListBean.usersExperiments}" var="exp">
<rq:request-list list="#{RequestListBean.requestsByExperiment[exp]}" showExperiment="false" spokespersonView="true" />
</ui:repeat>
现在表出现确定;也就是说,所有文字都是正确的。但是,commandLinks指向错误的请求...它们指向页面上 last rq:request-list的相应行的请求。与请求有关的数据输出应该在表中,但{req}指向单击commandLink时的错误请求。
重申一下,如果我在页面上有几个rq:请求列表,每个 rq:request-list的第一行的编辑链接指向第一个请求(行)页面上的最后一个rq:request-list。第二行每个 rq:request-list的Edit链接指向页面上最后一个rq:request-list的第二个请求(行)。等
如何让{req}指出它是什么,而不仅仅是过时的列表中的索引?
谢谢!
答案 0 :(得分:1)
看一下this blog entry,你可能会使用在构建组件树时执行一次的repeat,而不是在渲染时得到的foreach。 (但这只是在黑暗中拍摄,我没有尝试过你的例子)