我在使用其中包含另一个嵌套模板的模板时遇到问题。
我得到了
java.io.FileNotFoundException
at org.apache.naming.resources.DirContextURLConnection.getInputStream(DirContextURLConnection.java:403)
我有这个基本模板:
(./resources/css/template.xhtml)
<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">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<h:outputStylesheet library="css" name="stylesheet.css"/>
<title><ui:insert name="title"> Facelets template </ui:insert></title>
</h:head>
<h:body>
<div id="top" class="top_content">
<ui:insert name="top">Top</ui:insert>
</div>
<div>
<div id="content" class="center_content">
<ui:insert name="content">Content</ui:insert>
</div>
</div>
</h:body>
和“继承”模板的templateLogin:
(./resources/css/templateLogin.xhtml)
<ui:composition 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"
template="./resources/css/template.xhtml">
<ui:define name="title">
Some title
</ui:define>
<ui:define name="top">
<div id="top">
...code here
</div>
</ui:define>
</ui:composition>
我有欢迎文件,这是使用templateLogin的Web应用程序的欢迎文件:
<ui:composition 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"
template="./resources/css/templateLogin.xhtml">
<ui:define name="title">
Welcome title
</ui:define>
正如我所说,我找不到文件异常。当我为欢迎文件定义模板template.xhtml时,没有错误。因为它没有在指定的路径中看到templateLogin.xhtml,但它在那里是定义的。
有什么想法吗?感谢。
答案 0 :(得分:2)
摆脱模板路径中的前导期。前导期间使其相对于模板客户端的当前文件夹。如果模板路径以/
开头,那么它将成为Web内容根目录的绝对路径。
因此,所以:
template="/resources/css/template.xhtml"
和
template="/resources/css/templateLogin.xhtml"
无关,这些路径有2个问题:
将它们放在/WEB-INF
文件夹中。 E.g。
template="/WEB-INF/templates/layout.xhtml"
和
template="/WEB-INF/templates/login.xhtml"
答案 1 :(得分:0)
如果我查看你的代码,那么我会看到一些奇怪的事情。您的主模板位于 resources / css很好。但是,您的其他模板也位于/ resources / css
中在你的包含中你说:
template="./resources/css/template.xhtml"
所以你建议它在/ resources / resources / css中,是的,文件不存在。
所以请你包括这个:
template="template.xhtml"
我不知道你的templateLogin.xhtml在哪里,但是这里也要注意你的include
答案 2 :(得分:0)
使用:
#{request.contextPath}/resources/css/default.css