0

我在使用其中包含另一个嵌套模板的模板时遇到问题。

我明白了

 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,但它确实存在。

有任何想法吗?谢谢。

4

3 回答 3

2

摆脱模板路径中的领先时期。前导句点使其相对于模板客户端的当前文件夹。如果模板路径以 开头,/那么它就成为 Web 内容根目录的绝对路径。

因此,所以:

template="/resources/css/template.xhtml"

template="/resources/css/templateLogin.xhtml"

与具体问题无关,这些路径有两个问题:

  1. 模板文件不是 CSS 文件。
  2. 模板文件不应公开访问。

把它们放在/WEB-INF文件夹里。例如

template="/WEB-INF/templates/layout.xhtml"

template="/WEB-INF/templates/login.xhtml"

也可以看看:

于 2013-09-11T12:15:41.767 回答
0

利用:

#{request.contextPath}/resources/css/default.css
于 2013-12-10T22:03:40.433 回答
0

好吧,如果我查看您的代码,那么我会看到一些奇怪的东西。您的主模板位于 resources/css 中。但是您的其他模板也位于 /resources/css

在你的包括你说:

template="./resources/css/template.xhtml"

因此,您建议它位于 /resources/resources/css 中,是的,该文件不存在。

因此,请尝试包含以下内容:

template="template.xhtml"

我不知道你的 templateLogin.xhtml 在哪里,但这里也要注意你的包含

于 2013-09-11T08:22:52.997 回答