Java 为什么赢了';我的Facelets循环变量是否超出范围?

Java 为什么赢了';我的Facelets循环变量是否超出范围?,java,jsf,facelets,custom-component,custom-tag,Java,Jsf,Facelets,Custom Component,Custom Tag,我知道这看起来像是很多文字,但我认为这是一个非常简单的概念,我错过了 我正在用Facelets编写一个web应用程序。我有一个自定义标记rq:requestlist,它将请求列表作为参数,并输出一个可爱的表来显示它们。到目前为止,一切顺利 rq:请求列表的开头与您期望的一样: <!-- ... --> <ice:dataTable value="#{list}" var="req"> <ice:column> <f:facet n

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

我正在用Facelets编写一个web应用程序。我有一个自定义标记rq:requestlist,它将请求列表作为参数,并输出一个可爱的表来显示它们。到目前为止,一切顺利

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>
<!-- ... -->

上次编辑日期
结果很好。它甚至在表中有一个链接来编辑请求。哎呀

<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>

编辑
在将backingbean中的请求设置为我们所在的表行所代表的请求之后,我们将进入编辑页面。这就是问题所在。这很微妙

rq:一页中多次使用请求列表;因此:

<ui:repeat value="#{ExperimentListBean.usersExperiments}" var="exp">
    <rq:request-list list="#{RequestListBean.requestsByExperiment[exp]}" showExperiment="false" spokespersonView="true" />
</ui:repeat>

现在,表格显示正常;也就是说,所有的文本都是正确的。然而,commandLinks指向错误的请求。。。它们指向页面上最后一个rq:Request列表对应行的请求。与请求相关的数据按表中应有的方式输出,但是{req}在单击commandLink时指向错误的请求

重申一下,如果我在一个页面上有几个rq:request列表,那么everyrq:request列表的第一行的编辑链接指向页面上最后一个rq:request列表中的第一个请求(行)。每个rq:request列表第二行的编辑链接指向页面上最后一个rq:request列表的第二个请求(行)。等等

我怎样才能让{req}指向它是什么,而不仅仅是一个过时列表中的索引


谢谢

看看,您可能会使用repeat,它在构建组件树时执行一次,而不是foreach,它在渲染时得到评估。(但这只是一个暗箱操作,我没有试过你的例子)

看看,你可能会使用repeat,它在构建组件树时执行一次,而不是foreach,它在渲染时得到评估。(但这只是一个暗箱操作,我没有试过你的例子)

成功了!非常感谢。我对Java web编程还是新手;我认为c:forEach只执行一次,ui:repeat每次都执行。但话说回来,这个页面并没有回发到它自己,所以我不明白为什么这两种方式都很重要。不管怎样,它是有效的,所以谢谢!成功了!非常感谢。我对Java web编程还是新手;我认为c:forEach只执行一次,ui:repeat每次都执行。但话说回来,这个页面并没有回发到它自己,所以我不明白为什么这两种方式都很重要。不管怎样,它是有效的,所以谢谢!