0

I'm having a problem using template that has another nested template within it.

I get

 java.io.FileNotFoundException
at     org.apache.naming.resources.DirContextURLConnection.getInputStream(DirContextURLConnection.java:403)

I have this basic template :

(./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>

and templateLogin which "inherits" template :

(./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>

and I have welcome file which is welcome file of the web application which uses templateLogin:

<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>

As I said, I get file not found exception. When I define as template template.xhtml for the welcome file , there's no error. It's as it doesn't see templateLogin.xhtml in the specified path, but it's definetely there.

Any ideas? Thanks.

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
qwerty
  • 175
  • 4
  • 15

3 Answers3

2

Get rid of the leading period in your template paths. The leading period makes it relative to the current folder of the template client. If the template path starts with / then it becomes absolute to the web content root.

Thus, so:

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

and

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

Unrelated to the concrete problem, there are 2 problems with those paths:

  1. Template files are not CSS files.
  2. Template files are not supposed to be publicly accessible.

Put them in /WEB-INF folder. E.g.

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

and

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

See also:

Community
  • 1
  • 1
BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
  • Put the templates in WEB-INF and fixed the paths as you said, it fixed the problem. Thank you for clear and informative answer, I'm learning from you a lot! – qwerty Sep 15 '13 at 06:26
0

Well if i look to your code then i see some strange things. Your main template is located in resources/css Thats fine. But then your other template is also located in /resources/css

In your include you say:

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

So you suggest that it is in /resources/resources/css and yes the file is not there.

So trie in your include this:

template="template.xhtml"

I don't know where your templateLogin.xhtml is but also here pay attention to your include

Tankhenk
  • 634
  • 5
  • 20
0

Use:

#{request.contextPath}/resources/css/default.css
axetroll
  • 319
  • 2
  • 7