2009-07-15 5 views
1

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

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

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

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

Спасибо!

ответ

1

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

+0

Это сработало! Спасибо! Я все еще новичок в веб-программировании на Java; Я думал, что c: forEach был выполнен только один раз, а ui: repeat выполнялся каждый раз. Но опять же, эта страница не возвращается к себе, поэтому я не понимаю, почему это имеет значение в любом случае. Во всяком случае, это работает, поэтому спасибо! – Nick

Смежные вопросы