Динамически генерировать богатые элементы меню внутри богатого контекстного меню

Я пытаюсь динамически генерировать богатые пункты меню внутри компонента контекстного меню. Вот мой код:

<ui:repeat var="group" value="#{myBean.groups}" >
  <div align="center"> 
    <rich:panel>
      <h:graphicImage value="#{group.iconUrl}"/>
      <rich:contextMenu attached="true">
        <c:forEach var="child" items="#{group.children}">
          <rich:menuItem label="#{child.name}" />
        </c:forEach>
      </rich:contextMenu>
    </rich:panel>   
  </div>
</ui:repeat>

Я использую эту библиотеку тегов:

xmlns:c="http://java.sun.com/jsp/jstl/core

Моя проблема в том, что пункты меню не генерируются. Я также попытался заменить c:forEach на ui:repeat, но он все равно не будет работать.


Я попытался немного поэкспериментировать, чтобы устранить некоторые факторы. Я удалил богатое контекстное меню и использовал пользовательский интерфейс: repeat

<ui:repeat var="group" value="#{myBean.groups}" >
  <div align="center"> 
    <rich:panel>
      <h:graphicImage value="#{group.iconUrl}"/>
      <ui:repeat var="child" value="#{group.children}">
         <h:outputText value="#{child.name}" />
      </ui:repeat>
    </rich:panel>   
  </div>
</ui:repeat>

Этот фрагмент кода выше работал. Я предполагаю, что есть конфликт с рендерингом контекстного меню и повторением пользовательского интерфейса.

К сожалению, мне действительно нужно поместить group.children в компонент богатого контекстного меню. Можете ли вы предложить какой-либо подход, который поможет мне достичь того, чего я хочу?


ПРИМЕЧАНИЕ: я использую сервлет версии 3.0

1 ответ

<c:forEach> выполняется во время построения представления, когда файл XHTML должен быть преобразован в дерево компонентов JSF. <ui:repeat> выполняется во время визуализации представления, когда дерево компонентов JSF собирается произвести HTML.

Итак, в вашем конкретном примере, на данный момент <c:forEach> работает, #{group} переменная, как определено <ui:repeat> нигде не доступен в области EL и <c:forEach> в основном восстанавливает null как значение элементов и, следовательно, не имеет итерации.

Ваша конструкция будет работать только если вы замените внешнюю <ui:repeat> от <c:forEach> также.

Смотрите также:

Другие вопросы по тегам