2014-01-23 8 views
1

Я реализовал составной компонент в JSF с использованием простых элементов.Невозможно найти грань с именем 'header' в исходном составном компоненте

<ui:component ...> 
    <cc:interface> 
      <cc:facet name="header"/> ... 
    <cc:interface> 

<cc:implementation> 
    <p:dataTable> 
    <f:facet name="header"> 
     <c:choose> 
     <c:when test="#{empty cc.attrs.metadata.headerText}"> 
      <cc:insertFacet name="header" required="true"/> 
     </c:when> 
     <c:otherwise> 
     #{cc.attrs.headerText} 
     </c:otherwise> 
     </c:choose> 
    </f:facet> ... 
    </dataTable> 
</cc:implementation> 

Когда я использую его на обычной странице, он отлично работает, как и ожидалось, при передаче данных.

<ui:composition> 
    <nav:dataTable/> 
     <f:facet name="header"> 
      <h:outputText value="headerText" /> 
     </f:facet> 
</ui:composition> 

Но когда я использую его в диалоговом окне, которое использует выше составного компонента, он бросает

component.xhtml @ 28,54

Не удалось найти грань под названием «заголовок» в родитель составной компонент с идентификатором «» j_idt129

Я делаю AJAX вызов для вызова этого диалогового окна при щелчке ссылки. Диалог имеет другую форму и бросает эту ошибку в консоли. Кто-нибудь сталкивался с этим? Любая помощь действительно заметна.

+2

Не должны фасет должен быть заключен в тег ' '? – mabi

ответ

2

cc:insertFacet Вставляет весь тег f:facet, поэтому вы не должны вставлять его в другой тег f:facet в составной реализации. Как вы пишете обычай p:dataTable я думаю, что проще переписать уже существующий header facelet в объявлении интерфейса и условно делают это с помощью JSTL утилиты:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:composite="http://java.sun.com/jsf/composite" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:c="http://java.sun.com/jsp/jstl/core"> 

<h:body> 
    <composite:interface> 
     <composite:facet name="header" /> 
     <composite:attribute name="title" /> 
    </composite:interface> 

    <composite:implementation> 
     <p:dataTable> 
      <!-- If the facet is given at parent, insert it. 
      Otherwise, provide the title given by the attribute --> 
      <c:choose> 
       <c:when test="#{not empty cc.facets.header}"> 
        <composite:insertFacet name="header" /> 
       </c:when> 
       <c:otherwise> 
        <f:facet name="header"> 
         #{cc.attrs.title} 
        </f:facet> 
       </c:otherwise> 
      </c:choose> 

      <p:column headerText="column" /> 
     </p:dataTable> 
    </composite:implementation> 
</h:body> 
</html> 

Используя его как:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:comp="http://java.sun.com/jsf/composite/comp"> 

<f:view> 
    <h:head /> 
    <h:body> 
     <h:form> 
      <comp:myTable title="header"> 
       <f:facet name="header"> 
        <h:outputText value="text" /> 
       </f:facet> 
      </comp:myTable> 

      <comp:myTable title="Custom header" /> 

      <p:commandButton type="button" onclick="dialog.show()" 
       value="show in dialog" /> 

      <p:dialog widgetVar="dialog"> 
       <comp:myTable title="header"> 
        <f:facet name="header"> 
         <h:outputText value="text" /> 
        </f:facet> 
       </comp:myTable> 
      </p:dialog> 

     </h:form> 
    </h:body> 
</f:view> 
</html> 

 Смежные вопросы

  • Нет связанных вопросов^_^