为什么ui:insert的name属性是可选的,但对于ui:define是必需的?

时间:2012-10-26 18:44:10

标签: jsf jsf-2 facelets templating

正如我所理解的那样,ui:define用在充当模板客户端的文件中,ui:insert用于充当Facelets技术主模板的文件中,并且两者之间的联系发生通过“名称”属性。但我发现“{1}}的”名称“属性可选ui:insert强制性。为什么这样?

1 个答案:

答案 0 :(得分:1)

<ui:insert/>也可用于标记文件中以插入标记正文内容。

E.g。

/WEB-INF/tags/someTag.xhtml

<ui:composition ...>
    <p>Some HTML ...</p>
    <ui:insert/>
    <p>Some other HTML...</p>
<ui:composition>

将用作

<my:someTag ...>
    <p>This content will end up in place of ui:insert.</p>
</my:someTag>

顺便说一下,这对数据表特别有用:

/WEB-INF/tags/dataTable.xhtml

<ui:composition ...>
    <h:dataTable ...>
        <ui:insert/>
    </h:dataTable>
<ui:composition>

将用作

<my:dataTable ...>
    <h:column>...</h:column> <!-- can also be another tag file! -->
</my:dataTable>

请注意,复合组件无法实现上述目的。

另见: