Что происходит с компонентом tabView Primefaces

Имея этот код xhtml:

    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Simple JSF</title>
    </h:head>
    <h:body>
        <h:form>
           <ui:repeat value="#{cart.items}" var="item">
                        <h:panelGrid columns="2" cellpadding="10">
                             <h:outputText value="#{item}" />
                        </h:panelGrid>
            </ui:repeat> 
          </h:form>
     </h:body>
</html>

И фасоль:

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name = "cart")
@SessionScoped
public class CartBean {
 private List<String> items;
 public CartBean() {
    items = new ArrayList<>();
    items.add("shirt");
    items.add("skirt");
    items.add("trouser");
  }
 public List<String> getItems() {
    return items;
  }
}

Показывает три соответствующих элемента в outputText: «рубашка», «юбка» и «брюки». Но изменение тела xhtml, как показано:

    <h:body>
        <h:form>
          <p:tabView >
                <ui:repeat value="#{cart.items}" var="item">
                    <p:tab title="#{item}">
                        <h:panelGrid columns="2" cellpadding="10">
                             <h:outputText value="#{item}" />
                        </h:panelGrid>
                    </p:tab>
                </ui:repeat>
          </p:tabView>
         </h:form>
     </h:body>

Отображение tabView только с одной вкладкой (вместо трех) и без текста на вкладке. Я не понимаю, почему теряются данные?


person Juaky73    schedule 22.10.2014    source источник


Ответы (2)


Вы не используете ui:repeat внутри вкладки для создания вкладок. Tabview имеет собственную функцию итерации:

<p:tabView value="#{cart.items}" var="item">
    <p:tab title="#{item}">
        <h:outputText value="#{item}"/>
        ... etc.
    </p:tab>
</p:tabView>
person Emil Kaminski    schedule 22.10.2014
comment
Я уже пробовал раньше, но получаю сообщение об ошибке: com.sun.faces.facelets.compiler.UIInstructions не может быть приведен к org.primefaces.component.tabview.Tab - person Juaky73; 22.10.2014

Решено с помощью итератора владельца tabView вместо ui:repeat и добавления этого в файл web.xml:

<context-param>
      <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
      <param-value>true</param-value>   
</context-param>
person Juaky73    schedule 22.10.2014