Как динамически генерировать компоненты ace: tabPane? - PullRequest
0 голосов
/ 25 октября 2011

Я использую JSF 2.1 и ICEFaces 2, и у меня есть вкладка вроде:

<ace:tabSet clientSide="true">
    <ace:tabPane>
        <f:facet name="label">My First Tab</f:facet>
        <h:outputText value="One"></h:outputText>
    </ace:tabPane>
    <ace:tabPane>
        <f:facet name="label">Second Tab</f:facet>
        <h:outputText value="Two"></h:outputText>
    </ace:tabPane>
    <ace:tabPane>
        <f:facet name="label">Third Tab</f:facet>
        <h:outputText value="Third"></h:outputText>
    </ace:tabPane>
</ace:tabSet>

Вместо жесткого кодирования вкладок, я хочу генерировать их динамически на основе списка. Как мне добиться этого с помощью стандартных компонентов JSF или ICEFaces?

Я пытался использовать <ui:repeat>, но он не работает:

<ui:repeat var="o" value="#{bean.myList}" varStatus="status">
    <ace:tabPane>
        <f:facet name="label">#{o.name}</f:facet>
        <h:selectManyCheckbox value="#{o.valuesArray}" layout="pageDirection">
            <f:selectItems value="#{o.checkboxes}" />
        </h:selectManyCheckbox>
    </ace:tabPane>
</ui:repeat>

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

Я не делаю ICEFaces, но вы в основном сталкиваетесь с той же проблемой , что и RichFaces с <rich:tab>.Поскольку не существует гипотетического <rich:tabs> (например, <rich:columns>, который был бы динамическим вариантом <rich:column> / <h:column>), необходимо использовать тег JSTL <c:forEach> времени построения представления для подготовки представления JSF сэти теги.Вы можете применить то же самое на своей странице ICEFaces:

<ace:tabSet clientSide="true">
  <c:forEach items="#{bean.tabs}" var="tab">
    <ace:tabPane>
      <f:facet name="label">#{tab.label}</f:facet>
      <h:outputText value="#{tab.name}"></h:outputText>
    </ace:tabPane>
  </c:forEach>
</ace:tabSet>

Обратите внимание, что это не удастся, только если #{bean} не является реальным управляемым компонентом, а выражением, которое, в свою очередь, зависит от оценки другого компонента JSF.Например, <h:dataTable var="bean">.

<ui:repeat> не будет работать, так как это тег времени рендеринга.Он не будет динамически генерировать несколько компонентов JSF, прежде чем будет построено дерево компонентов JSF.

См. Также:

0 голосов
/ 01 марта 2012

Я думаю, вы можете написать так:

<ice:panelTabSet var="tab" value="#{mainTabsTempl.tabs}">
    <ice:panelTab label="#{tab.label}">
         body
    </ice:panelTab>
</ice:panelTabSet>

Это не тег tabSet, но такая же работа.

...