【问题标题】:Overriding <ui:define>覆盖 <ui:define>
【发布时间】:2012-09-17 06:01:51
【问题描述】:

有没有办法覆盖 JSF 模板提供的 &lt;ui:define&gt;?

例如文件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>

如果我想创建一个与main.xhtml 相同的main2.xhtml 文件,除了它使用不同的菜单之外,是否可以执行以下操作:

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

&lt;ui:define name="menu"&gt; 覆盖main.xhtml 中具有相同名称属性的标记

【问题讨论】:

    标签: jsf-2 facelets templating


    【解决方案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>
    

    【讨论】:

    • 我想我慢慢开始理解 ui:decorate 和 ui:composition 之间的区别 - 解释“jsf 忽略 ui:composition 之外的所有内容”似乎还不够 - ui:decorate 似乎也是如此与 ui:define 一起作用不同。例如。当您使用 ui:decorate 而不是 ui:composition 使用您提到的所有内容时,您建议的解决方案将不起作用。但是您可以在最后一步中使用 ui:decorate ,即在 main2.xhtml
    猜你喜欢
    • 1970-01-01
    • 2011-06-11
    • 2012-01-28
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2020-06-06
    相关资源
    最近更新 更多