覆盖<ui:define> </ui:define>

时间:2012-09-17 06:01:51

标签: jsf-2 facelets templating

有没有办法覆盖JSF模板提供的<ui:define>

例如文件main.xhtml,包含模板文件,包含:

<ui:define name="title">SomeTitle</ui:define>
<ui:define name="menu"><ui:include src="path_to_menu_1"/></ui:define>
<ui:define name="content">content_code_goes_here</ui:define>

如果我想要创建一个与main2.xhtml相同的main.xhtml文件,除了它使用不同的菜单,就有可能做到这样的事情:

<ui:include src="main.xhtml"/>
<ui:define name="menu"><ui:include src="path_to_menu_2"/></ui:define>

<ui:define name="menu">覆盖main.xhtml

中具有相同名称属性的标记的位置

1 个答案:

答案 0 :(得分:3)

只需指定main.xhtml作为main2.xhtml的模板。

main.xhtml

<ui:composition template="sometemplate.xhtml" ...>
    <ui:define name="title">SomeTitle</ui:define>
    <ui:define name="menu"><ui:include src="path_to_menu_1"/></ui:define>
    <ui:define name="content">content_code_goes_here</ui:define>
</ui:composition>

main2.xhtml

<ui:composition template="main.xhtml" ...>
    <ui:define name="menu"><ui:include src="path_to_menu_2"/></ui:define>
</ui:composition>