为什么我的Facelets的循环变量超出范围?(Why won't my Facelets

2019-10-16 23:10发布

我知道这看起来像一个大量的文字,但我认为这是一个非常简单的概念,我失踪。

我正在写与Facelets的Web应用程序。 我有一个自定义标签RQ:这需要作为请求的参数的列表,并输出一个可爱的表格来显示他们的请求列表。 到现在为止还挺好。

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>

现在表出现 OK; 也就是说,所有的文字是正确的。 然而,commandLinks指向错误的请求......他们指出, 过去的 RQ的对应行的请求:在页面上请求列表。 关于该请求的数据被输出,因为它应该在该表中,但{REQ}指向错误的请求,当涉及到点击一个commandLink。

要重申的是,如果我有几个RQ:在页面上请求列表,编辑链接, 每个 RQ的第一行:请求清单指向最后RQ的第一个请求(行):请求列表页上。 编辑链接, 每个 RQ的第二行:请求列表指向最后一个RQ的第二个请求(行):请求列表页面上。 等等。

我怎样才能得到{} REQ指向我这样了,不只是在已经过时列表的指数?

谢谢!

Answer 1:

看看这个博客条目 ,你可能使用的是执行一次,当组件树是重复建设,而不是它的foreach在渲染时得到评估。 (不过,这仅仅是一个在黑暗中拍摄,我没有想你的例子)



文章来源: Why won't my Facelets loop variable go out of scope?