2015-02-17 5 views
1

Я два вложенных композитныхУплотненного insertChildren композитного

Композитных

<?xml version="1.0" encoding="ISO-8859-1"?> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:f="http://java.sun.com/jsf/core" xmlns:s="http://sig.com/faces" 
    xmlns:composite="http://java.sun.com/jsf/composite"> 

    <composite:interface> 
    </composite:interface> 
    <composite:implementation> 
     <composite:insertChildren /> 
     <p:separator /> 
    </composite:implementation> 
</ui:composition> 

и композитного B

(CASE # 1)

<?xml version="1.0" encoding="ISO-8859-1"?> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:f="http://java.sun.com/jsf/core" xmlns:s="http://sig.com/faces" 
    xmlns:mycomposites="http://java.sun.com/jsf/composite/mycomposites" 
    xmlns:composite="http://java.sun.com/jsf/composite"> 

    <composite:interface> 
    </composite:interface> 
    <composite:implementation> 
     <mycomposites:a> 
      <composite:insertChildren /> 
     </mycomposites:a> 
    </composite:implementation> 

</ui:composition> 

Наконец у меня есть мнение или страница

<?xml version="1.0" encoding="ISO-8859-1"?> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:f="http://java.sun.com/jsf/core" xmlns:s="http://sig.com/faces" 
    xmlns:gt="http://java.sun.com/jsf/composite/template" 
    xmlns:mycomposites="http://java.sun.com/jsf/composite/mycomposites" 
    template="/template/template.xhtml"> 

    <ui:define name="body"> 
     <mycomposites:b> 
      <h:outputText value="test" /> 
     </mycomposites:b> 
    </ui:define> 

</ui:composition> 

«Тест» не отображается. Для того, что я видел, это потому, что insertChildren в B находится внутри другого композита insertChildren (A).

Если переместить insertChildren в B вне композит прекрасно работает следующим образом:

(CASE # 2)

<?xml version="1.0" encoding="ISO-8859-1"?> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:f="http://java.sun.com/jsf/core" xmlns:s="http://sig.com/faces" 
    xmlns:mycomposites="http://java.sun.com/jsf/composite/mycomposites" 
    xmlns:composite="http://java.sun.com/jsf/composite"> 

    <composite:interface> 
    </composite:interface> 
    <composite:implementation> 
     <mycomposites:desktop> 
      <!-- MOVED --> 
     </mycomposites:desktop> 
     <composite:insertChildren /> 
    </composite:implementation> 
</ui:composition> 

Но СЛУЧАЙ # 2 не делает много для меня. Мне это нужно как CASE # 2

Любая помощь?

Спасибо

ответ

1

У меня была такая же проблема, как и вы.

У меня есть компонент A.xhtml

<composite:implementation> 
    <primefaces:datatable> 
    <primefaces:column> 
     <h:outputText value="#{row.identityName}" /> 
    </primefaces:column> 
    <composite:insertChildren /> 
    </primefaces:datatable> 
</composite:implementation> 

, который используется в трех файлах:

  • общий/approve.xhtml
  • идентичности/технические/search.xhtml
  • identity/business/search.xhtml

На страницах «identity/*/search.xhtml» я передаю много идентификационных атрибутов и дочерних элементов компоненту A. Поскольку это создает много дублированный код, я попытался сделать подкомпонент компонента A для двух страниц идентификации.

identity_A.xhtml

<composite:implementation> 
    <component:A identityAttribute="example"> 
    <primefaces:column> 
     <h:outputText value="#{row.identityName}" /> 
    </primefaces:column> 
    <composite:insertChildren /> 
    </component:A> 
</composite:implementation> 

Я заметил, что дети, которые я дал, чтобы identity_A.xhtml Арент больше отображаться в primefaces DataTable.

Мое решение/Обход этой проблемы в том, чтобы создать шаблон для этих двух страниц вместо суб-компонента:

identitySearch.xhtml

... 
<component:A identityAttribute="example"> 
    <primefaces:column> 
    <h:outputText value="#{row.identityName}" /> 
    </primefaces:column> 
    <ui:insert name="datatableChildren"> 
</component:A> 
... 

Может быть, вы можете решить ваши Проблема, как я это сделал. Надеюсь, что будет решение, использовать composite:insertChildren во вложенных составных компонентах.