2012-09-17 52 views
3

有没有办法覆盖JSF模板提供的<ui:define>覆盖<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

只需指定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> 
+0

天才在于简单:) –

+0

我觉得我慢慢开始了解用户界面之间的区别:装饰和UI:组成 - 解释“JSF不顾一切在UI外部:构图“似乎不够 - 似乎ui:与ui一起装饰:定义行为的方式不同。例如。当您使用ui提及的所有内容时,建议的解决方案将不起作用:装饰而不是ui:组合。但您可以使用ui:在最后一步即main2.xhtml中进行修饰 – Toskan