Почему моя переменная цикла Facelets не выходит из области видимости? - PullRequest
1 голос
/ 16 июля 2009

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

Я пишу веб-приложение с 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} указывать на то, чем я был, а не просто указывать в списке, который устарел?

Спасибо!

1 Ответ

1 голос
/ 16 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...