1

我知道这看起来像很多文字,但我认为这是我缺少的一个非常简单的概念。

我正在用 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} 指向我原来的样子,而不仅仅是成为过时列表中的索引?

谢谢!

4

1 回答 1

1

看看这个博客条目,你可能会使用 repeat ,它在构建组件树时执行一次,而不是在渲染时进行评估的 foreach 。(但这只是在黑暗中拍摄,我没有尝试过你的例子)

于 2009-07-16T14:15:30.323 回答