Как использовать пользовательский интерфейс: включить внутри forEach и использовать переменную цикла внутри включенной страницы? - PullRequest
2 голосов
/ 27 апреля 2011

Я обновляюсь до JSF 2.0.2 в Tomcat 7.0.12, и у меня есть страница с переменным количеством повторно используемых виджетов. Я использовал для этой цели t: aliasBean, но, похоже, он не работает. Я сейчас пытаюсь следующее в моем Xhtml:

<c:forEach items="${viewBean.currentView.parts}" var="part">
<t:div styleClass="div#{viewBean.partNumber[part]}">
    <c:forEach items="${part.widgets}" var="widget">
        <f:subview id="div#{viewBean.widgetId[widget]}">
            <ui:include src="widgets/#{widget.widgetPage}">
                <ui:param name="widget" value="#{widget}" />
            </ui:include>
        </f:subview>
    </c:forEach>
</t:div>
</c:forEach> 

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

Редактировать : я попробовал пользовательский интерфейс: повторить - это не работает. Я также попытался удалить пользовательский интерфейс: включить, как тест на разумность; цикл работает нормально. Кроме того, я использую Spring 2.5.6.SEC01 - хотя это не должно иметь значения.

1 Ответ

1 голос
/ 27 апреля 2011

Я предлагаю использовать ui:repeat вместо c:forEach.

Почему?

Самая важная вещь для понимания о тегах jstl в Facelets есть что они не представляют компоненты и никогда не стать частью дерево компонентов после просмотра встроенный. Скорее, это теги, которые на самом деле ответственность за построение дерево на первом месте. Однажды они сделали свою работу, они истекают, являются не более, перестать быть и т. д. и т. д.

Источник здесь . Я действительно рекомендую прочитать всю статью.

UPDATE

Обратите внимание, что я не говорю, что c:forEach это плохо. Я хочу подчеркнуть, что смешивать его с ui:repeat не рекомендуется.

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