我知道这看起来像很多文字,但我认为这是我缺少的一个非常简单的概念。
我正在用 Facelets 编写一个 Web 应用程序。我有一个自定义标签 rq:request-list,它将请求列表作为参数并输出一个可爱的表格来显示它们。到现在为止还挺好。
rq:request-list 开始于你所期望的:
<!-- ... -->
<ice:dataTable value="#{list}" var="req">
<ice:column>
<f:facet name="header">Date last edited</f:facet>
<ice:outputText value="#{req.dateModified}" />
</ice:column>
<!-- ... -->
结果很好。它甚至在表格中有一个链接来编辑请求。伊皮!
<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:request-list 在一页中多次使用;像这样:
<ui:repeat value="#{ExperimentListBean.usersExperiments}" var="exp">
<rq:request-list list="#{RequestListBean.requestsByExperiment[exp]}" showExperiment="false" spokespersonView="true" />
</ui:repeat>
现在表格看起来不错;也就是说,所有的文字都是正确的。但是,commandLinks 指向了错误的 Requests……它们指向页面上最后一个rq:request-list 对应行的 Request。与请求有关的数据按应在表中的形式输出,但 {req} 在单击 commandLink 时指向错误的请求。
重申一下,如果我在页面上有几个 rq:request-lists,则每个rq:request-list 第一行的 Edit 链接指向页面上最后一个 rq:request-list 中的第一个请求(行) . 每个rq:request-list的第二行的 Edit 链接指向页面上最后一个 rq:request-list 的第二个请求(行)。等等。
我怎样才能让 {req} 指向我原来的样子,而不仅仅是成为过时列表中的索引?
谢谢!