我想创建一个由模板支持的facelet组件。
类似的东西:
<h:panelGroup rendered="#{myBean.isStepActive('step0')}">
<composition template="wizard-step.jspx">
<ui:define name="title">Step One</ui:define>
<ui:define name="text"><p>This describes the step</p></ui:define>
</composition>
</h:panelGroup>
<h:panelGroup rendered="#{myBean.isStepActive('step1')}">
<composition template="wizard-step">
<ui:define name="title">Step Two</ui:define>
(...)
似乎无法正常工作,因为无论渲染什么,都会将wizard-step.jspx的内容放在任何页面上(似乎ui:标签在所有其他标记之前进行评估。
有没有办法实现我想要的? 在我的情况下,普通的自定义标记不够强大,因为它只支持xml属性但不支持子元素。
答案 0 :(得分:1)
好的,我找到了解决方案并且非常简单。
只需使用普通的taglib并使用&lt;用户界面:插入&gt;和&lt;用户界面:定义&GT;那样:
<my:wizardStep>
<ui:insert name="title"><h2>The header comes here</h2>/ui:insert>
</<my:wizardStep>
在标签定义中:
<ui:composition>
<ui:insert name="title" />
(...)