c: forEach vs ui: repeat (он же ice: panelSeries) - PullRequest
0 голосов
/ 23 августа 2010

Я стараюсь избегать использования c: forEach, потому что я слышал, что JSTL плохо сочетается с фазой рендеринга JSF ... Я совсем не уверен в этом утверждении. Напротив, мне пришлось прибегнуть к использованию c: forEach вместо ui: repeat во многих случаях, потому что ui: repeat просто НЕ перебирает коллекцию .. это произошло во многих случаях, когда я не могу выделить причину, и во всех в этих случаях c: forEach была заменой с хорошим поведением. Мой вопрос касается одного случая, когда c: forEach ведет себя не очень хорошо, и пользовательский интерфейс: repeat не возвращает ничего из коллекции (даже если он повторяет теги html для украшения правильное число раз).

Что происходит, так это то, что иногда компоненты JSF, созданные внутри c: forEach, разбрасываются по всей странице, оставляя теги оформления HTML в теле c: forEach пустыми и визуализируются в другом месте страницы. Это происходит только несколько раз, особенно при обновлении с использованием F5 (которое исправляется в большинстве случаев с последующим обновлением с помощью Ctrl + F5).

Я полностью сбит с толку и был бы признателен за любые идеи о том, что происходит .. почему пользовательский интерфейс: repeat (и ice: panelSeries) не возвращает значения из коллекции ?? почему рассеяние c: forEach является содержимым повсеместно (кажется, что при построении дерева компонентов JSf возникает состояние гонки ... может быть, отрендеренный должен ждать c: forEach, а это не так) ?? Почему это произошло только в этом случае ??

Мне жаль, что я не включаю никакие фрагменты кода или снимки экрана, потому что я не знаю, что включать .. проблема слишком общая. Но вы можете быть совершенно уверены, что мой синтаксис правильный ... Я уже проверил это ... и я не использую переменную состояния (которая вызывает слишком много проблем в пользовательском интерфейсе: повтор).

1 Ответ

1 голос
/ 23 августа 2010

пользовательский интерфейс: повторение просто НЕ повторяется в коллекции

Работает следующий код:

<ui:repeat value="#{myCollection}" var="item">  
   <h:outputText value="#{item}" />
</ui:repeat>

Почему это произошло только в этом случае??

без примера this case трудно понять ..

Однако, c: forEach vs ui: повторить документ может помочь вамнайти причину.

...