我正在尝试在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>
谢谢!