在Facelet模板中包含非Facelet内容

时间:2009-09-29 00:06:17

标签: jsf facelets

有没有办法将html文件的内容插入Facelet模板? Facelets标记不起作用,因为它仅用于包含Facelet内容。

换句话说,我正在寻找与JSP包含指令<%@ include file="..." %>等效的Facelets。

4 个答案:

答案 0 :(得分:4)

我可能无法理解您的需求,但<ui:include>并不局限于facelets内容,您可以根据this link插入有效的xhtml。

考虑使用facelets文件(test.jsp):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">

    <body>
        <f:view>
            <h:outputText value="Text outside include"/>
            <ui:include src="testinclude.html"/>
        </f:view>
    </body>
</html>

关注HTML文件(testinclude.html):

<h2>Text from included page</h2>

它正确包含了页面中的HTML内容。在facelets模板中使用<ui:include>时也适用。

答案 1 :(得分:1)

Facelets中唯一包含的机制是,它不允许包含任意内容,只有格式良好的XML。 Facelets中没有与JSP include指令等效的东西。

答案 2 :(得分:1)

这描述了一个解决方案:http://arjan-tijms.omnifaces.org/2010/04/facelets-and-legacy-jsp.html

该解决方案包括构建一个简单的UI组件,该组件将JSP或Servlet内容加载到字符串中,并通过正常的响应编写器呈现。

答案 3 :(得分:1)

Omnifaces的<o:resourceInclude>可用于将任意内容直接包含在响应中。这意味着它不必与<ui:include>一样形成良好的xml。您也可以在JSF页面的<h:head>部分中包含内容,否则很难实现。

http://showcase.omnifaces.org/components/resourceInclude