将开始和结束标记放在单独的包含文件中

时间:2015-03-19 10:41:10

标签: jsf jsf-2 facelets uiinclude

我想将来自不同文件的html代码包含到我的main.xhtml页面中。但这不适用于<ui:include>。因为代码被分成不同的文件,这使得每个文件都有无效的html代码。

我的意思是:

html1.html

<div>

html2.html

</div>

main.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:p="http://primefaces.org/ui">

INCLUDE HTML1

<h:outputLabel value="blablabla" />

INCLUDE HTML2

</ui:composition>

有没有办法完成这项任务?

2 个答案:

答案 0 :(得分:2)

这没有意义。您不允许在单个Facelet文件中使用语法无效的XML。此外,您不能通过<ui:include>或任何<ui:xxx>标记添加普通的HTML。那些必须是真正的Facelet组合(因此是语法上有效的XML)。

我认为你想控制一个包含模板的主体。在这种情况下,将它们放在一个模板文件中,<ui:insert>表示您要插入正文的位置:

<ui:composition
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
>
    <div>
        <ui:insert/>
    </div>
</ui:composition>   

然后,在其上使用<ui:decorate>

<ui:decorate template="html.xhtml">
    <h:outputText value="blablabla" />
</ui:decorate>

Note that <h:outputLabel> serves an entirely different purpose

另见:

答案 1 :(得分:1)

将代码划分为更多文件:

include file1_before_div
<div>
include file1_after_div
<h:outputLabel value="blablabla" />
include file2_before_div_close
</div>
include file2_after_div_close