Есть ли способ создания динамически <rich: tab> элементов? - PullRequest
5 голосов
/ 26 октября 2010

Допустим, я хочу создать набор переменных из <rich:tab> элементов в компоненте <rich:tabPanel>. Поэтому я попытался сделать так:

<rich:tabPanel switchType="client" ...>
    <ui:repeat value="#{myBean.myTabs}" var="tab">
        <rich:tab name="#{tab.name}" label="#{tab.label}"/>
    </ui:repeat>
</rich:tabPanel>

Но это не сработало, так как вкладка не отображается. Я также получил следующее сообщение в логах:

j_id174: tab panel has no enabled or rendered tabs!

Эта проблема, похоже, встречается другими людьми, например здесь .

Итак, как было предложено в предыдущей теме, я заменил свой <ui:repeat> на <c:forEach>, но проблема все еще возникает.

<Ч />

У меня есть способ решить эту проблему, используя атрибут binding моего компонента <rich:tabPanel>:

<rich:tabPanel switchType="client" binding="#{tabNavigationBean.tabPanel}"
</rich:tabPanel>

и затем в моем Java-бине:

private HtmlTabPanel tabPanel; // + getter and setter

public void setTabPanel(HtmlTabPanel tabPanel) {
    this.tabPanel = tabPanel;
    if (tabPanel != null) {
        createTabs();
    }
}

private void createTabs() {
    Application application = FacesContext.getCurrentInstance().getApplication();
    HtmlTab newTab = null;
    for (DedicatedPageTab dpt : getDedicatedPageTabs()) {
        newTab = (HtmlTab) application.createComponent(HtmlTab.COMPONENT_TYPE);
        newTab.setLabel(dpt.getLabel());
        newTab.setName(dpt.getName());
        tabPanel.getChildren().add(newTab);
    }
}

Этот код работает .

Однако мой вопрос состоит в том, чтобы узнать, смогу ли я решить свою проблему без с помощью атрибута binding (то есть 100% -ное решение XHTML)?

Ответы [ 2 ]

2 голосов
/ 26 июля 2011
<a4j:outputPanel id="out">
    <rich:tabPanel>
        <c:forEach items="list" var="var">
            <rich:tab label="#{var.name}" switchType="client">
                content
            </rich:tab>
        </c:forEach>
    </rich:tabPanel>
</a4j:outputPanel>
0 голосов
/ 16 июня 2011

Да, это возможно, но сложно.Вот некоторые заметки, которые у меня есть:

Используйте c: forEach для создания тегов табуляции внутри tabPanel внутри outputPanel.reRender outputPanel при удалении вкладки, добавлении или изменении имени

http://relation.to/11633.lace

http://devharbor.blogspot.com/2009/08/add-jsf-controls-dynamically-with.html


Мы также использовали шаблоны, хотя у меня все еще естьнерешенная проблема для него: Как форсировать фазу сборки на странице JSF 1.2 с помощью JSTL?

http://facelets.java.net/nonav/docs/dev/docbook.html#template Документы по шаблонам

http://www.jsfcentral.com/articles/facelets_3.html Учебник по шаблонам

...