Я знаю, что это выглядит как много текста, но я думаю, что это довольно простая концепция, которую мне не хватает.
Я пишу веб-приложение с 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>
<!-- ... -->
И это прекрасно получается. У него даже есть ссылка в таблице для редактирования запроса. 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>
Это возвращает нас к странице редактирования, после установки запроса в компоненте поддержки на тот, который представлен строкой таблицы, в которой мы находимся. Вот в чем проблема. И это тонко.
rq: request-list используется несколько раз на одной странице; как таковой:
<ui:repeat value="#{ExperimentListBean.usersExperiments}" var="exp">
<rq:request-list list="#{RequestListBean.requestsByExperiment[exp]}" showExperiment="false" spokespersonView="true" />
</ui:repeat>
Теперь таблицы появляются OK; то есть весь текст правильный. Однако commandLinks указывают на неправильные запросы ... они указывают на запрос соответствующей строки last rq: request-list на странице. Данные, относящиеся к запросам, выводятся в том виде, в каком они должны быть в таблице, но {req} указывает на неправильный запрос, когда дело доходит до щелчка по ссылке на команду.
Чтобы повторить, если у меня есть несколько списков rq: request на странице, ссылка Изменить для первой строки каждые rq: запрос-списка указывает на первый запрос (строку) в последний запрос: список запросов на странице. Ссылка Edit для второй строки каждые rq: request-list указывает на второй запрос (строку) последнего rq: request-list на странице. И т.д.
Как я могу заставить {req} указывать на то, чем я был, а не просто указывать в списке, который устарел?
Спасибо!