【发布时间】:2018-02-21 20:26:16
【问题描述】:
根据documentation of ui:include tag
使用这个标签——它与 JSP 的 jsp:include 非常相似——来封装 并在多个 XHTML 页面之间重用内容。有三件事 此标记可以包括:纯 XHTML 和具有以下任一标签的 XHTML 页面 组合标签或组件标签。
您通过 ui:include 的 src 属性为 JSF 提供一个文件名 包括。该文件名相对于呈现的 XHTML 文件 作为最后一个请求的结果。因此,例如,如果 JSF 加载 查看 login.xhtml,该文件包括 pageDecorations/header.xhtml, 和 pageDecorations/header.xhtml 包括 companyLogo.xhtml, 然后 companyLogo.xhtml 如果在 pageDecorations 中,将不会被找到 目录,因为 companyLogo.xhtml 必须在同一目录中 作为 login.xhtml。
我创建了一个简单的测试:
webapp/login.xhtml
<!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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:body>
<ui:include src="pageDecorations/header.xhtml" />
</h:body>
</html>
webapp/pageDecorations/header.xhtml
<ui:include
src="logo.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
/>
webapp/pageDecorations/logo.xhtml
<h:outputText
value="Logo in /pageDecorations"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
/>
webapp/logo.xhtml
<h:outputText value="Logo in /"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
/>
当我在 WildFly 10.1 上使用 JSF 2.2 运行此测试(加载 login.xhtml 页面)时,我得到了 Logo in /pageDecorations,而根据文档,它应该是:Logo in /
怎么了 ?文档或 Mojarra 实现中是否存在错误?
还是我的理解有误?
【问题讨论】:
-
是的 webapp/pageDecorations/logo.xhtml 应该被调用,因为你目前在 webapp/pageDecorations/ 里面,它会找到 webapp/pageDecorations/logo.xhtml