嵌套的insertChildren复合

时间:2015-02-17 18:08:53

标签: jsf composite-component

我有两个嵌套的复合

复合A

<?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

(案例#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>

“test”未呈现。 对于我所看到的,这是因为B中的insertChildren位于另一个复合insertChildren(A)中。

如果我在B外移动insertChildren,那么合成工作就好了:

(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>

但CASE#2对我没什么用。我需要它像CASE#2

任何帮助?

谢谢

1 个答案:

答案 0 :(得分: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
  • 同一性/商业/ search.xhtml

在&#34;身份/ * / search.xhtml&#34;页面我给组件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数据表中。

此问题的解决方案/解决方法是为这两个页面而不是子组件创建模板:

identitySearch.xhtml

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

也许你可以像我一样解决你的问题。 我希望,有一个解决方案,在嵌套复合组件中使用composite:insertChildren