Почему моя переменная цикла Facelets не выходит за пределы области видимости?
-
16-09-2019 - |
Вопрос
Я знаю, это выглядит как много текста, но я думаю, что это довольно простая концепция, которой мне не хватает.
Я пишу веб-приложение с 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, который вычисляется во время рендеринга.(Но это всего лишь попытка наугад, я не пробовал ваш пример)