有没有办法将 html 文件的内容插入到 Facelet 模板中?Facelets 标签将不起作用,因为它仅用于包含 Facelet 内容。
换句话说,我正在寻找与 JSP 包含指令等效的 Facelets <%@ include file="..." %>
。
我可能不明白您需要什么,但<ui:include>
不限于 facelets 内容,您可以根据此链接插入有效的 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 内容。这也适用<ui:include>
于在 facelets 模板中使用时。
Facelets 中唯一的包含机制是 ,它不允许包含任意内容,只能包含格式良好的 XML。Facelets 中没有与 JSP 包含指令等效的指令。
这描述了一个解决方案:http ://arjan-tijms.omnifaces.org/2010/04/facelets-and-legacy-jsp.html
该解决方案包括构建一个简单的 UI 组件,该组件将 JSP 或 Servlet 内容加载到字符串中,并通过正常的响应编写器呈现。
Omnifaces<o:resourceInclude>
可用于将任意内容直接包含到响应中。这意味着它不必像 .xml 那样是格式良好的 xml <ui:include>
。您还可以在<h:head>
JSF 页面的部分中包含内容,否则很难实现。