JSF复合组件可配置渲染

时间:2016-03-12 10:40:31

标签: jsf jsf-2 primefaces children composite-component

我正在尝试在JSF复合组件上实现动态渲染(我使用Primefaces)。基本上,我认为很多渲染组件都像"标题+内容"根据。我想制作一个通用实现,开发人员不必关心渲染是如何完成的(渲染可以通过应用程序中的另一个bean进行配置。也就是说:

主要组件(accordion / tabview / grid等)                   

<composite:implementation>
    <p:accordionPanel rendered="#{composite.attrs.renderingType eq 'accord'}>
         <composite:insertChildren/>
    </p:accordionPanel>
    <p:tabView rendered="#{composite.attrs.renderingType eq 'accord'}>
         <composite:insertChildren>
             <f:param name="renderingType" value="accord"/>
         </composite:insertChildren>
    </p:tabView>
    <c:if test="#{composite.attrs.renderingType eq null}">
         <composite:insertChildren>
             <f:param name="renderingType" value="tabView"/>
         </composite:insertChildren>
    </c:if>
</composite:implementation>

&#34;项目&#34;组件(手风琴选项卡,tabview选项卡,简单网格等)                   

<composite:implementation>
    <p:tab rendered="${renderingType eq 'accord'}">
         <composite:insertChildren/>
    </p:accordionPanel>
    <p:tabView rendered="${renderingType eq 'tabView'}">
         <composite:insertChildren/>
    </p:tabView>
    //....etc.
</composite:implementation>

对这些复合组件的调用将是:

<appcc:myCustomRenderer renderingType='How I want to render it'>
      <appcc:myCustomRendererItem header="Title1">
           //Content 1
      </appcc:myCustomRendererItem>
      <appcc:myCustomRendererItem header="Title2">
           //Content 2
      </appcc:myCustomRendererItem>
      //Etc.
</appcc:myCustomRenderer>

目前我没有想到这个实现的方面(我应该吗?)。在一个简单的例子中(主要组件只渲染一个折叠面板,而项目组件只渲染一个标签),它似乎不起作用。不知道为什么?

//Main component
<composite:implementation>
    <p:accordionPanel>
        <composite:insertChildren/>
    </p:accordionPanel>
</composite:implementation>

//Item Component
<composite:implementation>
    <p:tab >
    Any content
    </p:tab>
</composite:implementation>

谢谢!

0 个答案:

没有答案