Почему моя переменная цикла Facelets не выходит за пределы области видимости?

StackOverflow https://stackoverflow.com/questions/1134604

Вопрос

Я знаю, это выглядит как много текста, но я думаю, что это довольно простая концепция, которой мне не хватает.

Я пишу веб-приложение с Facelets.У меня есть пользовательский тег 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>
<!-- ... -->

И это получается просто замечательно.В таблице даже есть ссылка для редактирования запроса.Ура!

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

Это приведет нас на страницу редактирования, после установки запроса в вспомогательном компоненте на запрос, представленный строкой таблицы, в которой мы находимся.Вот в чем проблема.И это очень тонко.

rq: список запросов используется несколько раз на одной странице;как таковой:

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

Теперь таблицы появиться ОК;то есть весь текст правильный.Однако ссылки на команды указывают на неправильные запросы ...они указывают на запрос соответствующей строки Последние rq: список запросов на странице.Данные, относящиеся к Запросам, выводятся в таблице, как и должно быть, но {req} указывает на неправильный запрос, когда дело доходит до нажатия на командную ссылку.

Повторяю, если у меня есть несколько списков запросов rq: на странице, ссылка Редактировать для первой строки каждый rq: список запросов указывает на первый запрос (строку) в последнем списке запросов rq: на странице.Ссылка на редактирование для второй строки каждый rq:список запросов указывает на второй запрос (строку) последнего списка запросов rq: на странице.И т.д.

Как я могу заставить {req} указывать на то, что I это было, а не просто быть индексом в устаревшем списке?

Спасибо!

Это было полезно?

Решение

Взгляните на эта запись в блоге, вы, вероятно, используете repeat, который выполняется один раз, когда строится дерево компонентов, вместо foreach, который вычисляется во время рендеринга.(Но это всего лишь попытка наугад, я не пробовал ваш пример)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top