qwerty
qwerty

Reputation: 175

JSF nested templates file not found exception

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.

Upvotes: 0

Views: 1426

Answers (3)

axetroll
axetroll

Reputation: 319

Use:

#{request.contextPath}/resources/css/default.css

Upvotes: 0

BalusC
BalusC

Reputation: 1109635

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:

Upvotes: 2

Tankhenk
Tankhenk

Reputation: 634

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

Upvotes: 0

Related Questions