ui:include 在 JSF 2.2 中包含错误的文件



根据ui:include标签的文档

使用此标记(与JSP的jsp:include非常相似)来封装 并在多个 XHTML 页面之间重用内容。有三件事 此标记可以包括:纯 XHTML 和具有 组合标签或组件标签。

您可以通过 ui:include 的 src 属性为 JSF 提供一个文件名 包括。该文件名相对于呈现的 XHTML 文件 作为最后一个请求的结果。因此,例如,如果 JSF 加载了 查看登录.xhtml,该文件包含页面装饰/标题.xhtml, 和页面装饰/标题.xhtml包括公司徽标.xhtml,然后 公司徽标.xhtml如果在页面中将找不到装饰 目录,因为公司徽标.xhtml必须位于同一目录中 作为登录.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"
/>

网络应用/页面装饰/徽标.xhtml

<h:outputText 
value="Logo in /pageDecorations" 
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
/>

网络应用/徽标.xhtml

<h:outputText value="Logo in /" 
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
/>

当我在 WildFly 2.2 上运行此测试(加载登录.xhtml页面)时,我得到了Logo in /pageDecorations,而根据文档,它应该是:Logo in /出了

什么问题?文档或 Mojarra 实现中是否有错误?
还是我的理解是错误的?

首先,您在webapp/内部并执行webapp/login.xhtml在里面你得到src="pageDecorations/header.xhtml",为了执行你在页面装饰和从标题.xhtml你试图找到src="logo.xhtml",你将得到同一个目录(pageDecorations),所以它会打印"徽标在/页面装饰">. 在这种情况下,文档看起来有问题。

最新更新