You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Younes Ouadi <yo...@gmail.com> on 2011/02/19 11:12:06 UTC

JSF Template in Classpath

Hello deras,

I have a hands-on experience with JSF. I have been able to develop a first
application. And I'm now in the stage of reorganizing it for a better
management. I'm trying to move 'templates' to classpath in order to share
them in jar for different applications. But I'm stack there. Pages that
reference that template are not rendered and MyFaces returns the error (see
below for full details of the error): java.io.FileNotFoundException:
/lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
Not Found in ExternalContext as a Resource

Please help in pointing the missing part in my application.

*1) Project:*
*1.1) Hierarchy*
lab-jsf-rsrcmng
*    pom.xml*
    src/main/webapp
*        home2.xhtml*
        WEB-INF
*            faces-config.xml*
*            web.xml*
    src/main/resources/META-INF/resources/mytempl
*        templateInClasspath.xhtml*
*
*
*1.2) pom.xml*
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd
"
>
<modelVersion>4.0.0</modelVersion>

<groupId>lab-jsf</groupId>
<artifactId>lab-jsf-rsrcmng</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>

<name>LAB::JSF::RESOURCE MANAGEMENT</name>
<url>http://maven.apache.org</url>

<properties>
<servlet.version>2.5</servlet.version>
<jsp.version>2.1</jsp.version>
<myfaces.version>2.0.3</myfaces.version>
</properties>

<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>${myfaces.version}</version>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
<version>${myfaces.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
</build>
</project>

*1.3) home2.xhtml*
<?xml version="1.0" encoding="UTF-8"?>

<!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:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<h:body>
<ui:composition template="#{resource['mytempl:templateInClasspath.xhtml']}">
</ui:composition>
</h:body>
</html>



*1.4) faces-config.xml*
<?xml version="1.0" encoding="UTF-8"?>

<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd
"
version="2.0"
>
</faces-config>


*1.5) web.xml:*
<?xml version="1.0" encoding="UTF-8"?>

<web-app
version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
"
>
<display-name>lab-jsf-rsrcmng</display-name>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>home2.xhtml</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<context-param>
<description>
If true, a javascript function will be rendered that is able to restore the
former vertical scroll on every request. Convenient feature if you have
pages
with long lists and you do not want the browser page to always jump to the
top
if you trigger a link or button action that stays on the same page.
Default is 'false'
</description>
<param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.USE_ENCRYPTION</param-name>
<param-value>false</param-value>
</context-param>
</web-app>


*1.6) templateInClasspath.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:c="http://java.sun.com/jsp/jstl/core"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<f:view contentType="text/html">
<h:head>
<title>LAB::JSF::RSRCMNG</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</h:head>
<h:body styleClass="natisoft-body" >
<h:panelGrid columns="1">
<f:facet name="header">
<ui:insert name="header">Header</ui:insert>
</f:facet>

<f:facet name="footer">
<ui:insert name="trailer">Trailer</ui:insert>
</f:facet>

<h:panelGroup>
<ui:insert name="content">Content</ui:insert>
</h:panelGroup>
</h:panelGrid>
</h:body>
</f:view>
</html>

*2) Error details*

An Error Occurred:
java.io.FileNotFoundException:
/lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
Not Found in ExternalContext as a Resource

Caused by:
java.io.FileNotFoundException -
/lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
Not Found in ExternalContext as a Resource
- Stack Trace <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>

javax.faces.FacesException: java.io.FileNotFoundException:
/lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
Not Found in ExternalContext as a Resource
	at org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241)
	at org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156)
	at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:258)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
Caused by: java.io.FileNotFoundException:
/lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
Not Found in ExternalContext as a Resource
	at org.apache.myfaces.view.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:199)
	at org.apache.myfaces.view.facelets.impl.DefaultFacelet.getRelativePath(DefaultFacelet.java:289)
	at org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:346)
	at org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:215)
	at org.apache.myfaces.view.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:140)
	at org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:57)
	at org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:45)
	at org.apache.myfaces.view.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:143)
	at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.buildView(FaceletViewDeclarationLanguage.java:329)
	at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:66)
	at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
	... 16 more

- Component Tree <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
<UIViewRoot id="j_id0" inView="true" locale="en_US" renderKitId="HTML_BASIC"
rendered="true" transient="false" viewId="/home2.xhtml"/> - State size:548
bytes
- Scoped Variables <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
Request ParametersNameValue*None*Request AttributesNameValue*None*View
AttributesNameValue*None*Flash AttributesNameValue*None*Application
AttributesNameValue*None*
Feb 19, 2011 9:52:09 AM - Generated by MyFaces - for information on
disabling or modifying this error-page, see Disabling error handling in
MyFaces <http://wiki.apache.org/myfaces/Handling_Server_Errors>

Thank you in advance

Younes Ouadi

Re: JSF Template in Classpath

Posted by Younes Ouadi <yo...@gmail.com>.
Hello Jakob,

Many thanks for your valuable actions.

Warm regards

Younes Ouadi

On Sun, Feb 20, 2011 at 10:50 AM, Jakob Korherr <ja...@gmail.com>wrote:

> Hi,
>
> Just FYI: I opened JAVASERVERFACES_SPEC_PUBLIC-946 (see [1]) to
> discuss your misinterpretation of #{resource['...']} with the JSF EG
> in order to find a more convenient way to address this issue than the
> custom method in the managed bean, because I think it is a "mistake"
> many users make.
>
> Regards,
> Jakob
>
> [1] http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-946
>
> 2011/2/20 Jakob Korherr <ja...@gmail.com>:
> > Hi,
> >
> > Resource resource = facesContext.getApplication().getResourceHandler()
> >               .createResource("templateInClasspath.xhtml", "mytempl");
> >
> > exactly implements this functionality. It looks for
> > templateInClasspath.xhtml in /mytempl and in
> > /META-INF/resources/mytempl just like your tutorial says.
> >
> > Regards,
> > Jakob
> >
> > 2011/2/19 Younes Ouadi <yo...@gmail.com>:
> >> Hi Jakob,
> >> Many thanks for your prompt reply. I really appreciate it.
> >> I got your point. It is clear that I'm misusing the '#{resource['...']}'
> >> mechanism.
> >> Apart from your proposed solution, how I can instruct MyFaces to behave
> as
> >> described in the JEE 6 Tutorial: 'The JavaServer Faces runtime will look
> for
> >> the resources in the preceding listed locations, in that order (Web
> Context
> >> then Classpath)'?
> >> You might telling your self: what a lazy guy I'm dealing with. Please,
> >> forgive me please, it is not my intention.
> >> I was developing ZK application (v3.6) where I have developed a
> mechanism to
> >> load resources from where I need. When I read this part of the Tutorial,
> I
> >> said to my self: some code is there to avoid with JSF.
> >> Many thanks for your valuable help.
> >> Younes Ouadi
> >>
> >> On Sat, Feb 19, 2011 at 1:20 PM, Jakob Korherr <jakob.korherr@gmail.com
> >
> >> wrote:
> >>>
> >>> Hi,
> >>>
> >>> That is all true. However, #{resource['...']} gives you a path like
> >>> /context-root/faces/javax.faces.resource/resourceName.suffix, thus a
> >>> URL for the browser. In <ui:composition template="..."> you need the
> >>> path to the file on the server! And this is something else entirely!
> >>>
> >>> Regards,
> >>> Jakob
> >>>
> >>> 2011/2/19 Younes Ouadi <yo...@gmail.com>:
> >>> > Hi Jakob,
> >>> > Many thanks for your prompt feedback.
> >>> > In fact, I have understood from 'JEE 6 Tutorial' that JSF
> >>> > implementations
> >>> > are expected to manage templates like CSS and JS resources. Please
> refer
> >>> > to
> >>> > the bold parts of below section extracted from the Tutorial page 118:
> >>> > Web resources are any software artifacts that the web application
> >>> > requires
> >>> > for proper rendering, including images, script files, and any
> >>> > user-created
> >>> > component libraries. Resources must be collected in a standard
> location,
> >>> > which can be one of the following.
> >>> > ■ A resource packaged in the web application root must be in a
> >>> > subdirectory
> >>> > of a resources directory at the web application root:
> >>> > resources/resource-identifier.
> >>> > ■ A resource packaged in the web application’s classpath must be in a
> >>> > subdirectory of the META-INF/resources directory within a web
> >>> > application: META-INF/resources/resource-identifier.
> >>> > The JavaServer Faces runtime will look for the resources in the
> >>> > preceding
> >>> > listed locations, in that order.
> >>> > Resource identifiers are unique strings that conform to the following
> >>> >
> >>> >
> format: [locale-prefix/][library-name/][library-version/]resource-name[/resource-version]. Elements
> >>> > of the resource identifier in brackets ([]) are optional, indicating
> >>> > that
> >>> > only a resource-name, which is usually a file name, is a required
> >>> > element.
> >>> > Resources can be considered as a library location. Any artifact, such
> as
> >>> > a
> >>> > composite component or a template that is stored in the resources
> >>> > directory,
> >>> > becomes accessible to the other application components, which can use
> it
> >>> > to
> >>> > create a resource instance.
> >>> > END OF JEE 6 TUTORIAL
> >>> >
> >>> > From the above, I was expecting that MyFaces would found my resource
> >>> > 'templateInClasspath.xhtml'.
> >>> > Anyway, I will use your proposed solution as a workaround for the
> time
> >>> > being.
> >>> > Warm regards.
> >>> >
> >>> > Younes Ouadi
> >>> >
> >>> > On Sat, Feb 19, 2011 at 12:12 PM, Jakob Korherr
> >>> > <ja...@gmail.com>
> >>> > wrote:
> >>> >>
> >>> >> Hi Younes,
> >>> >>
> >>> >> Unfortunately #resource['...'] does not work that way. You should
> only
> >>> >> use it for getting the browser path to HTML resources like css or
> >>> >> javascript files, e.g.:
> >>> >>
> >>> >> <link href="#resource['lib:style.css']" rel="stylesheet" />
> >>> >>
> >>> >>
> >>> >> In your example you need to use Resource.getUrl() in a managed bean,
> >>> >> so something like that:
> >>> >>
> >>> >> <ui:composition template="#{myBean.templatePath}">
> >>> >>
> >>> >>
> >>> >> public String getTemplatePath()
> >>> >> {
> >>> >>        FacesContext facesContext =
> FacesContext.getCurrentInstance();
> >>> >>
> >>> >>        Resource resource =
> >>> >> facesContext.getApplication().getResourceHandler()
> >>> >>                .createResource("templateInClasspath.xhtml",
> "mytempl");
> >>> >>        URL url = resource.getURL();
> >>> >>
> >>> >>        return url.toExternalForm();
> >>> >> }
> >>> >>
> >>> >> I hope this helps.
> >>> >>
> >>> >> Regards,
> >>> >> Jakob
> >>> >>
> >>> >>
> >>> >> 2011/2/19 Younes Ouadi <yo...@gmail.com>:
> >>> >> > Hello deras,
> >>> >> >
> >>> >> > I have a hands-on experience with JSF. I have been able to develop
> a
> >>> >> > first
> >>> >> > application. And I'm now in the stage of reorganizing it for a
> better
> >>> >> > management. I'm trying to move 'templates' to classpath in order
> to
> >>> >> > share
> >>> >> > them in jar for different applications. But I'm stack there. Pages
> >>> >> > that
> >>> >> > reference that template are not rendered and MyFaces returns the
> >>> >> > error
> >>> >> > (see
> >>> >> > below for full details of the error):
> java.io.FileNotFoundException:
> >>> >> >
> >>> >> >
> >>> >> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> >>> >> > Not Found in ExternalContext as a Resource
> >>> >> >
> >>> >> > Please help in pointing the missing part in my application.
> >>> >> >
> >>> >> > *1) Project:*
> >>> >> > *1.1) Hierarchy*
> >>> >> > lab-jsf-rsrcmng
> >>> >> > *    pom.xml*
> >>> >> >    src/main/webapp
> >>> >> > *        home2.xhtml*
> >>> >> >        WEB-INF
> >>> >> > *            faces-config.xml*
> >>> >> > *            web.xml*
> >>> >> >    src/main/resources/META-INF/resources/mytempl
> >>> >> > *        templateInClasspath.xhtml*
> >>> >> > *
> >>> >> > *
> >>> >> > *1.2) pom.xml*
> >>> >> > <project
> >>> >> > xmlns="http://maven.apache.org/POM/4.0.0"
> >>> >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >>> >> > xsi:schemaLocation="
> >>> >> > http://maven.apache.org/POM/4.0.0
> >>> >> > http://maven.apache.org/xsd/maven-4.0.0.xsd
> >>> >> > "
> >>> >> >>
> >>> >> > <modelVersion>4.0.0</modelVersion>
> >>> >> >
> >>> >> > <groupId>lab-jsf</groupId>
> >>> >> > <artifactId>lab-jsf-rsrcmng</artifactId>
> >>> >> > <packaging>war</packaging>
> >>> >> > <version>0.0.1-SNAPSHOT</version>
> >>> >> >
> >>> >> > <name>LAB::JSF::RESOURCE MANAGEMENT</name>
> >>> >> > <url>http://maven.apache.org</url>
> >>> >> >
> >>> >> > <properties>
> >>> >> > <servlet.version>2.5</servlet.version>
> >>> >> > <jsp.version>2.1</jsp.version>
> >>> >> > <myfaces.version>2.0.3</myfaces.version>
> >>> >> > </properties>
> >>> >> >
> >>> >> > <dependencies>
> >>> >> > <dependency>
> >>> >> > <groupId>javax.servlet</groupId>
> >>> >> > <artifactId>servlet-api</artifactId>
> >>> >> > <version>${servlet.version}</version>
> >>> >> > <scope>provided</scope>
> >>> >> > </dependency>
> >>> >> > <dependency>
> >>> >> > <groupId>javax.servlet.jsp</groupId>
> >>> >> > <artifactId>jsp-api</artifactId>
> >>> >> > <version>${jsp.version}</version>
> >>> >> > <scope>provided</scope>
> >>> >> > </dependency>
> >>> >> > <dependency>
> >>> >> > <groupId>org.apache.myfaces.core</groupId>
> >>> >> > <artifactId>myfaces-api</artifactId>
> >>> >> > <version>${myfaces.version}</version>
> >>> >> > </dependency>
> >>> >> > <dependency>
> >>> >> > <groupId>org.apache.myfaces.core</groupId>
> >>> >> > <artifactId>myfaces-impl</artifactId>
> >>> >> > <version>${myfaces.version}</version>
> >>> >> > </dependency>
> >>> >> > <dependency>
> >>> >> > <groupId>junit</groupId>
> >>> >> > <artifactId>junit</artifactId>
> >>> >> > <version>4.8.2</version>
> >>> >> > <scope>test</scope>
> >>> >> > </dependency>
> >>> >> > </dependencies>
> >>> >> >
> >>> >> > <build>
> >>> >> > <plugins>
> >>> >> > <plugin>
> >>> >> > <groupId>org.apache.maven.plugins</groupId>
> >>> >> > <artifactId>maven-compiler-plugin</artifactId>
> >>> >> > <version>2.0.2</version>
> >>> >> > <configuration>
> >>> >> > <source>1.5</source>
> >>> >> > <target>1.5</target>
> >>> >> > </configuration>
> >>> >> > </plugin>
> >>> >> > </plugins>
> >>> >> > <finalName>${project.artifactId}</finalName>
> >>> >> > </build>
> >>> >> > </project>
> >>> >> >
> >>> >> > *1.3) home2.xhtml*
> >>> >> > <?xml version="1.0" encoding="UTF-8"?>
> >>> >> >
> >>> >> > <!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:h="http://java.sun.com/jsf/html"
> >>> >> > xmlns:ui="http://java.sun.com/jsf/facelets"
> >>> >> >>
> >>> >> > <h:body>
> >>> >> > <ui:composition
> >>> >> > template="#{resource['mytempl:templateInClasspath.xhtml']}">
> >>> >> > </ui:composition>
> >>> >> > </h:body>
> >>> >> > </html>
> >>> >> >
> >>> >> >
> >>> >> >
> >>> >> > *1.4) faces-config.xml*
> >>> >> > <?xml version="1.0" encoding="UTF-8"?>
> >>> >> >
> >>> >> > <faces-config
> >>> >> > xmlns="http://java.sun.com/xml/ns/javaee"
> >>> >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >>> >> > xsi:schemaLocation="
> >>> >> > http://java.sun.com/xml/ns/javaee
> >>> >> > http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd
> >>> >> > "
> >>> >> > version="2.0"
> >>> >> >>
> >>> >> > </faces-config>
> >>> >> >
> >>> >> >
> >>> >> > *1.5) web.xml:*
> >>> >> > <?xml version="1.0" encoding="UTF-8"?>
> >>> >> >
> >>> >> > <web-app
> >>> >> > version="2.5"
> >>> >> > xmlns="http://java.sun.com/xml/ns/javaee"
> >>> >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >>> >> > xsi:schemaLocation="
> >>> >> > http://java.sun.com/xml/ns/javaee
> >>> >> > http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
> >>> >> > "
> >>> >> >>
> >>> >> > <display-name>lab-jsf-rsrcmng</display-name>
> >>> >> > <session-config>
> >>> >> > <session-timeout>30</session-timeout>
> >>> >> > </session-config>
> >>> >> > <welcome-file-list>
> >>> >> > <welcome-file>home2.xhtml</welcome-file>
> >>> >> > </welcome-file-list>
> >>> >> > <servlet>
> >>> >> > <servlet-name>Faces Servlet</servlet-name>
> >>> >> > <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
> >>> >> > <load-on-startup>1</load-on-startup>
> >>> >> > </servlet>
> >>> >> > <servlet-mapping>
> >>> >> > <servlet-name>Faces Servlet</servlet-name>
> >>> >> > <url-pattern>/faces/*</url-pattern>
> >>> >> > <url-pattern>*.xhtml</url-pattern>
> >>> >> > </servlet-mapping>
> >>> >> > <context-param>
> >>> >> > <description>
> >>> >> > If true, a javascript function will be rendered that is able to
> >>> >> > restore
> >>> >> > the
> >>> >> > former vertical scroll on every request. Convenient feature if you
> >>> >> > have
> >>> >> > pages
> >>> >> > with long lists and you do not want the browser page to always
> jump
> >>> >> > to
> >>> >> > the
> >>> >> > top
> >>> >> > if you trigger a link or button action that stays on the same
> page.
> >>> >> > Default is 'false'
> >>> >> > </description>
> >>> >> > <param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
> >>> >> > <param-value>true</param-value>
> >>> >> > </context-param>
> >>> >> > <context-param>
> >>> >> > <param-name>org.apache.myfaces.USE_ENCRYPTION</param-name>
> >>> >> > <param-value>false</param-value>
> >>> >> > </context-param>
> >>> >> > </web-app>
> >>> >> >
> >>> >> >
> >>> >> > *1.6) templateInClasspath.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:c="http://java.sun.com/jsp/jstl/core"
> >>> >> > xmlns:f="http://java.sun.com/jsf/core"
> >>> >> > xmlns:h="http://java.sun.com/jsf/html"
> >>> >> > xmlns:ui="http://java.sun.com/jsf/facelets"
> >>> >> >>
> >>> >> > <f:view contentType="text/html">
> >>> >> > <h:head>
> >>> >> > <title>LAB::JSF::RSRCMNG</title>
> >>> >> > <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
> />
> >>> >> > </h:head>
> >>> >> > <h:body styleClass="natisoft-body" >
> >>> >> > <h:panelGrid columns="1">
> >>> >> > <f:facet name="header">
> >>> >> > <ui:insert name="header">Header</ui:insert>
> >>> >> > </f:facet>
> >>> >> >
> >>> >> > <f:facet name="footer">
> >>> >> > <ui:insert name="trailer">Trailer</ui:insert>
> >>> >> > </f:facet>
> >>> >> >
> >>> >> > <h:panelGroup>
> >>> >> > <ui:insert name="content">Content</ui:insert>
> >>> >> > </h:panelGroup>
> >>> >> > </h:panelGrid>
> >>> >> > </h:body>
> >>> >> > </f:view>
> >>> >> > </html>
> >>> >> >
> >>> >> > *2) Error details*
> >>> >> >
> >>> >> > An Error Occurred:
> >>> >> > java.io.FileNotFoundException:
> >>> >> >
> >>> >> >
> >>> >> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> >>> >> > Not Found in ExternalContext as a Resource
> >>> >> >
> >>> >> > Caused by:
> >>> >> > java.io.FileNotFoundException -
> >>> >> >
> >>> >> >
> >>> >> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> >>> >> > Not Found in ExternalContext as a Resource
> >>> >> > - Stack Trace <
> http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
> >>> >> >
> >>> >> > javax.faces.FacesException: java.io.FileNotFoundException:
> >>> >> >
> >>> >> >
> >>> >> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> >>> >> > Not Found in ExternalContext as a Resource
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:258)
> >>> >> >        at
> >>> >> > javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281)
> >>> >> >        at
> >>> >> >
> >>> >> >
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> >>> >> >        at
> >>> >> >
> >>> >> >
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> >>> >> >        at java.lang.Thread.run(Thread.java:619)
> >>> >> > Caused by: java.io.FileNotFoundException:
> >>> >> >
> >>> >> >
> >>> >> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> >>> >> > Not Found in ExternalContext as a Resource
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.myfaces.view.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:199)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.myfaces.view.facelets.impl.DefaultFacelet.getRelativePath(DefaultFacelet.java:289)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:346)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:215)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.myfaces.view.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:140)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:57)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:45)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.myfaces.view.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:143)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.buildView(FaceletViewDeclarationLanguage.java:329)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:66)
> >>> >> >        at
> >>> >> >
> >>> >> >
> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
> >>> >> >        ... 16 more
> >>> >> >
> >>> >> > - Component Tree
> >>> >> > <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
> >>> >> > <UIViewRoot id="j_id0" inView="true" locale="en_US"
> >>> >> > renderKitId="HTML_BASIC"
> >>> >> > rendered="true" transient="false" viewId="/home2.xhtml"/> - State
> >>> >> > size:548
> >>> >> > bytes
> >>> >> > - Scoped Variables
> >>> >> > <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
> >>> >> > Request ParametersNameValue*None*Request
> >>> >> > AttributesNameValue*None*View
> >>> >> > AttributesNameValue*None*Flash
> AttributesNameValue*None*Application
> >>> >> > AttributesNameValue*None*
> >>> >> > Feb 19, 2011 9:52:09 AM - Generated by MyFaces - for information
> on
> >>> >> > disabling or modifying this error-page, see Disabling error
> handling
> >>> >> > in
> >>> >> > MyFaces <http://wiki.apache.org/myfaces/Handling_Server_Errors>
> >>> >> >
> >>> >> > Thank you in advance
> >>> >> >
> >>> >> > Younes Ouadi
> >>> >> >
> >>> >>
> >>> >>
> >>> >>
> >>> >> --
> >>> >> Jakob Korherr
> >>> >>
> >>> >> blog: http://www.jakobk.com
> >>> >> twitter: http://twitter.com/jakobkorherr
> >>> >> work: http://www.irian.at
> >>> >
> >>> >
> >>>
> >>>
> >>>
> >>> --
> >>> Jakob Korherr
> >>>
> >>> blog: http://www.jakobk.com
> >>> twitter: http://twitter.com/jakobkorherr
> >>> work: http://www.irian.at
> >>
> >>
> >
> >
> >
> > --
> > Jakob Korherr
> >
> > blog: http://www.jakobk.com
> > twitter: http://twitter.com/jakobkorherr
> > work: http://www.irian.at
> >
>
>
>
> --
> Jakob Korherr
>
> blog: http://www.jakobk.com
> twitter: http://twitter.com/jakobkorherr
> work: http://www.irian.at
>

Re: JSF Template in Classpath

Posted by Jakob Korherr <ja...@gmail.com>.
Hi,

Just FYI: I opened JAVASERVERFACES_SPEC_PUBLIC-946 (see [1]) to
discuss your misinterpretation of #{resource['...']} with the JSF EG
in order to find a more convenient way to address this issue than the
custom method in the managed bean, because I think it is a "mistake"
many users make.

Regards,
Jakob

[1] http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-946

2011/2/20 Jakob Korherr <ja...@gmail.com>:
> Hi,
>
> Resource resource = facesContext.getApplication().getResourceHandler()
>               .createResource("templateInClasspath.xhtml", "mytempl");
>
> exactly implements this functionality. It looks for
> templateInClasspath.xhtml in /mytempl and in
> /META-INF/resources/mytempl just like your tutorial says.
>
> Regards,
> Jakob
>
> 2011/2/19 Younes Ouadi <yo...@gmail.com>:
>> Hi Jakob,
>> Many thanks for your prompt reply. I really appreciate it.
>> I got your point. It is clear that I'm misusing the '#{resource['...']}'
>> mechanism.
>> Apart from your proposed solution, how I can instruct MyFaces to behave as
>> described in the JEE 6 Tutorial: 'The JavaServer Faces runtime will look for
>> the resources in the preceding listed locations, in that order (Web Context
>> then Classpath)'?
>> You might telling your self: what a lazy guy I'm dealing with. Please,
>> forgive me please, it is not my intention.
>> I was developing ZK application (v3.6) where I have developed a mechanism to
>> load resources from where I need. When I read this part of the Tutorial, I
>> said to my self: some code is there to avoid with JSF.
>> Many thanks for your valuable help.
>> Younes Ouadi
>>
>> On Sat, Feb 19, 2011 at 1:20 PM, Jakob Korherr <ja...@gmail.com>
>> wrote:
>>>
>>> Hi,
>>>
>>> That is all true. However, #{resource['...']} gives you a path like
>>> /context-root/faces/javax.faces.resource/resourceName.suffix, thus a
>>> URL for the browser. In <ui:composition template="..."> you need the
>>> path to the file on the server! And this is something else entirely!
>>>
>>> Regards,
>>> Jakob
>>>
>>> 2011/2/19 Younes Ouadi <yo...@gmail.com>:
>>> > Hi Jakob,
>>> > Many thanks for your prompt feedback.
>>> > In fact, I have understood from 'JEE 6 Tutorial' that JSF
>>> > implementations
>>> > are expected to manage templates like CSS and JS resources. Please refer
>>> > to
>>> > the bold parts of below section extracted from the Tutorial page 118:
>>> > Web resources are any software artifacts that the web application
>>> > requires
>>> > for proper rendering, including images, script files, and any
>>> > user-created
>>> > component libraries. Resources must be collected in a standard location,
>>> > which can be one of the following.
>>> > ■ A resource packaged in the web application root must be in a
>>> > subdirectory
>>> > of a resources directory at the web application root:
>>> > resources/resource-identifier.
>>> > ■ A resource packaged in the web application’s classpath must be in a
>>> > subdirectory of the META-INF/resources directory within a web
>>> > application: META-INF/resources/resource-identifier.
>>> > The JavaServer Faces runtime will look for the resources in the
>>> > preceding
>>> > listed locations, in that order.
>>> > Resource identifiers are unique strings that conform to the following
>>> >
>>> > format: [locale-prefix/][library-name/][library-version/]resource-name[/resource-version]. Elements
>>> > of the resource identifier in brackets ([]) are optional, indicating
>>> > that
>>> > only a resource-name, which is usually a file name, is a required
>>> > element.
>>> > Resources can be considered as a library location. Any artifact, such as
>>> > a
>>> > composite component or a template that is stored in the resources
>>> > directory,
>>> > becomes accessible to the other application components, which can use it
>>> > to
>>> > create a resource instance.
>>> > END OF JEE 6 TUTORIAL
>>> >
>>> > From the above, I was expecting that MyFaces would found my resource
>>> > 'templateInClasspath.xhtml'.
>>> > Anyway, I will use your proposed solution as a workaround for the time
>>> > being.
>>> > Warm regards.
>>> >
>>> > Younes Ouadi
>>> >
>>> > On Sat, Feb 19, 2011 at 12:12 PM, Jakob Korherr
>>> > <ja...@gmail.com>
>>> > wrote:
>>> >>
>>> >> Hi Younes,
>>> >>
>>> >> Unfortunately #resource['...'] does not work that way. You should only
>>> >> use it for getting the browser path to HTML resources like css or
>>> >> javascript files, e.g.:
>>> >>
>>> >> <link href="#resource['lib:style.css']" rel="stylesheet" />
>>> >>
>>> >>
>>> >> In your example you need to use Resource.getUrl() in a managed bean,
>>> >> so something like that:
>>> >>
>>> >> <ui:composition template="#{myBean.templatePath}">
>>> >>
>>> >>
>>> >> public String getTemplatePath()
>>> >> {
>>> >>        FacesContext facesContext = FacesContext.getCurrentInstance();
>>> >>
>>> >>        Resource resource =
>>> >> facesContext.getApplication().getResourceHandler()
>>> >>                .createResource("templateInClasspath.xhtml", "mytempl");
>>> >>        URL url = resource.getURL();
>>> >>
>>> >>        return url.toExternalForm();
>>> >> }
>>> >>
>>> >> I hope this helps.
>>> >>
>>> >> Regards,
>>> >> Jakob
>>> >>
>>> >>
>>> >> 2011/2/19 Younes Ouadi <yo...@gmail.com>:
>>> >> > Hello deras,
>>> >> >
>>> >> > I have a hands-on experience with JSF. I have been able to develop a
>>> >> > first
>>> >> > application. And I'm now in the stage of reorganizing it for a better
>>> >> > management. I'm trying to move 'templates' to classpath in order to
>>> >> > share
>>> >> > them in jar for different applications. But I'm stack there. Pages
>>> >> > that
>>> >> > reference that template are not rendered and MyFaces returns the
>>> >> > error
>>> >> > (see
>>> >> > below for full details of the error): java.io.FileNotFoundException:
>>> >> >
>>> >> >
>>> >> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>>> >> > Not Found in ExternalContext as a Resource
>>> >> >
>>> >> > Please help in pointing the missing part in my application.
>>> >> >
>>> >> > *1) Project:*
>>> >> > *1.1) Hierarchy*
>>> >> > lab-jsf-rsrcmng
>>> >> > *    pom.xml*
>>> >> >    src/main/webapp
>>> >> > *        home2.xhtml*
>>> >> >        WEB-INF
>>> >> > *            faces-config.xml*
>>> >> > *            web.xml*
>>> >> >    src/main/resources/META-INF/resources/mytempl
>>> >> > *        templateInClasspath.xhtml*
>>> >> > *
>>> >> > *
>>> >> > *1.2) pom.xml*
>>> >> > <project
>>> >> > xmlns="http://maven.apache.org/POM/4.0.0"
>>> >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> >> > xsi:schemaLocation="
>>> >> > http://maven.apache.org/POM/4.0.0
>>> >> > http://maven.apache.org/xsd/maven-4.0.0.xsd
>>> >> > "
>>> >> >>
>>> >> > <modelVersion>4.0.0</modelVersion>
>>> >> >
>>> >> > <groupId>lab-jsf</groupId>
>>> >> > <artifactId>lab-jsf-rsrcmng</artifactId>
>>> >> > <packaging>war</packaging>
>>> >> > <version>0.0.1-SNAPSHOT</version>
>>> >> >
>>> >> > <name>LAB::JSF::RESOURCE MANAGEMENT</name>
>>> >> > <url>http://maven.apache.org</url>
>>> >> >
>>> >> > <properties>
>>> >> > <servlet.version>2.5</servlet.version>
>>> >> > <jsp.version>2.1</jsp.version>
>>> >> > <myfaces.version>2.0.3</myfaces.version>
>>> >> > </properties>
>>> >> >
>>> >> > <dependencies>
>>> >> > <dependency>
>>> >> > <groupId>javax.servlet</groupId>
>>> >> > <artifactId>servlet-api</artifactId>
>>> >> > <version>${servlet.version}</version>
>>> >> > <scope>provided</scope>
>>> >> > </dependency>
>>> >> > <dependency>
>>> >> > <groupId>javax.servlet.jsp</groupId>
>>> >> > <artifactId>jsp-api</artifactId>
>>> >> > <version>${jsp.version}</version>
>>> >> > <scope>provided</scope>
>>> >> > </dependency>
>>> >> > <dependency>
>>> >> > <groupId>org.apache.myfaces.core</groupId>
>>> >> > <artifactId>myfaces-api</artifactId>
>>> >> > <version>${myfaces.version}</version>
>>> >> > </dependency>
>>> >> > <dependency>
>>> >> > <groupId>org.apache.myfaces.core</groupId>
>>> >> > <artifactId>myfaces-impl</artifactId>
>>> >> > <version>${myfaces.version}</version>
>>> >> > </dependency>
>>> >> > <dependency>
>>> >> > <groupId>junit</groupId>
>>> >> > <artifactId>junit</artifactId>
>>> >> > <version>4.8.2</version>
>>> >> > <scope>test</scope>
>>> >> > </dependency>
>>> >> > </dependencies>
>>> >> >
>>> >> > <build>
>>> >> > <plugins>
>>> >> > <plugin>
>>> >> > <groupId>org.apache.maven.plugins</groupId>
>>> >> > <artifactId>maven-compiler-plugin</artifactId>
>>> >> > <version>2.0.2</version>
>>> >> > <configuration>
>>> >> > <source>1.5</source>
>>> >> > <target>1.5</target>
>>> >> > </configuration>
>>> >> > </plugin>
>>> >> > </plugins>
>>> >> > <finalName>${project.artifactId}</finalName>
>>> >> > </build>
>>> >> > </project>
>>> >> >
>>> >> > *1.3) home2.xhtml*
>>> >> > <?xml version="1.0" encoding="UTF-8"?>
>>> >> >
>>> >> > <!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:h="http://java.sun.com/jsf/html"
>>> >> > xmlns:ui="http://java.sun.com/jsf/facelets"
>>> >> >>
>>> >> > <h:body>
>>> >> > <ui:composition
>>> >> > template="#{resource['mytempl:templateInClasspath.xhtml']}">
>>> >> > </ui:composition>
>>> >> > </h:body>
>>> >> > </html>
>>> >> >
>>> >> >
>>> >> >
>>> >> > *1.4) faces-config.xml*
>>> >> > <?xml version="1.0" encoding="UTF-8"?>
>>> >> >
>>> >> > <faces-config
>>> >> > xmlns="http://java.sun.com/xml/ns/javaee"
>>> >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> >> > xsi:schemaLocation="
>>> >> > http://java.sun.com/xml/ns/javaee
>>> >> > http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd
>>> >> > "
>>> >> > version="2.0"
>>> >> >>
>>> >> > </faces-config>
>>> >> >
>>> >> >
>>> >> > *1.5) web.xml:*
>>> >> > <?xml version="1.0" encoding="UTF-8"?>
>>> >> >
>>> >> > <web-app
>>> >> > version="2.5"
>>> >> > xmlns="http://java.sun.com/xml/ns/javaee"
>>> >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> >> > xsi:schemaLocation="
>>> >> > http://java.sun.com/xml/ns/javaee
>>> >> > http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
>>> >> > "
>>> >> >>
>>> >> > <display-name>lab-jsf-rsrcmng</display-name>
>>> >> > <session-config>
>>> >> > <session-timeout>30</session-timeout>
>>> >> > </session-config>
>>> >> > <welcome-file-list>
>>> >> > <welcome-file>home2.xhtml</welcome-file>
>>> >> > </welcome-file-list>
>>> >> > <servlet>
>>> >> > <servlet-name>Faces Servlet</servlet-name>
>>> >> > <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
>>> >> > <load-on-startup>1</load-on-startup>
>>> >> > </servlet>
>>> >> > <servlet-mapping>
>>> >> > <servlet-name>Faces Servlet</servlet-name>
>>> >> > <url-pattern>/faces/*</url-pattern>
>>> >> > <url-pattern>*.xhtml</url-pattern>
>>> >> > </servlet-mapping>
>>> >> > <context-param>
>>> >> > <description>
>>> >> > If true, a javascript function will be rendered that is able to
>>> >> > restore
>>> >> > the
>>> >> > former vertical scroll on every request. Convenient feature if you
>>> >> > have
>>> >> > pages
>>> >> > with long lists and you do not want the browser page to always jump
>>> >> > to
>>> >> > the
>>> >> > top
>>> >> > if you trigger a link or button action that stays on the same page.
>>> >> > Default is 'false'
>>> >> > </description>
>>> >> > <param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
>>> >> > <param-value>true</param-value>
>>> >> > </context-param>
>>> >> > <context-param>
>>> >> > <param-name>org.apache.myfaces.USE_ENCRYPTION</param-name>
>>> >> > <param-value>false</param-value>
>>> >> > </context-param>
>>> >> > </web-app>
>>> >> >
>>> >> >
>>> >> > *1.6) templateInClasspath.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:c="http://java.sun.com/jsp/jstl/core"
>>> >> > xmlns:f="http://java.sun.com/jsf/core"
>>> >> > xmlns:h="http://java.sun.com/jsf/html"
>>> >> > xmlns:ui="http://java.sun.com/jsf/facelets"
>>> >> >>
>>> >> > <f:view contentType="text/html">
>>> >> > <h:head>
>>> >> > <title>LAB::JSF::RSRCMNG</title>
>>> >> > <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
>>> >> > </h:head>
>>> >> > <h:body styleClass="natisoft-body" >
>>> >> > <h:panelGrid columns="1">
>>> >> > <f:facet name="header">
>>> >> > <ui:insert name="header">Header</ui:insert>
>>> >> > </f:facet>
>>> >> >
>>> >> > <f:facet name="footer">
>>> >> > <ui:insert name="trailer">Trailer</ui:insert>
>>> >> > </f:facet>
>>> >> >
>>> >> > <h:panelGroup>
>>> >> > <ui:insert name="content">Content</ui:insert>
>>> >> > </h:panelGroup>
>>> >> > </h:panelGrid>
>>> >> > </h:body>
>>> >> > </f:view>
>>> >> > </html>
>>> >> >
>>> >> > *2) Error details*
>>> >> >
>>> >> > An Error Occurred:
>>> >> > java.io.FileNotFoundException:
>>> >> >
>>> >> >
>>> >> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>>> >> > Not Found in ExternalContext as a Resource
>>> >> >
>>> >> > Caused by:
>>> >> > java.io.FileNotFoundException -
>>> >> >
>>> >> >
>>> >> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>>> >> > Not Found in ExternalContext as a Resource
>>> >> > - Stack Trace <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
>>> >> >
>>> >> > javax.faces.FacesException: java.io.FileNotFoundException:
>>> >> >
>>> >> >
>>> >> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>>> >> > Not Found in ExternalContext as a Resource
>>> >> >        at
>>> >> >
>>> >> > org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241)
>>> >> >        at
>>> >> >
>>> >> > org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156)
>>> >> >        at
>>> >> >
>>> >> > org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:258)
>>> >> >        at
>>> >> > javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
>>> >> >        at
>>> >> >
>>> >> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
>>> >> >        at
>>> >> >
>>> >> > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>>> >> >        at
>>> >> >
>>> >> > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
>>> >> >        at
>>> >> >
>>> >> > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
>>> >> >        at
>>> >> >
>>> >> > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
>>> >> >        at
>>> >> >
>>> >> > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
>>> >> >        at
>>> >> >
>>> >> > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
>>> >> >        at
>>> >> >
>>> >> > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>>> >> >        at
>>> >> >
>>> >> > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
>>> >> >        at
>>> >> >
>>> >> > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
>>> >> >        at
>>> >> >
>>> >> > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
>>> >> >        at
>>> >> >
>>> >> > org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281)
>>> >> >        at
>>> >> >
>>> >> > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>>> >> >        at
>>> >> >
>>> >> > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>>> >> >        at java.lang.Thread.run(Thread.java:619)
>>> >> > Caused by: java.io.FileNotFoundException:
>>> >> >
>>> >> >
>>> >> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>>> >> > Not Found in ExternalContext as a Resource
>>> >> >        at
>>> >> >
>>> >> > org.apache.myfaces.view.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:199)
>>> >> >        at
>>> >> >
>>> >> > org.apache.myfaces.view.facelets.impl.DefaultFacelet.getRelativePath(DefaultFacelet.java:289)
>>> >> >        at
>>> >> >
>>> >> > org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:346)
>>> >> >        at
>>> >> >
>>> >> > org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:215)
>>> >> >        at
>>> >> >
>>> >> > org.apache.myfaces.view.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:140)
>>> >> >        at
>>> >> >
>>> >> > org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:57)
>>> >> >        at
>>> >> >
>>> >> > org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:45)
>>> >> >        at
>>> >> >
>>> >> > org.apache.myfaces.view.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:143)
>>> >> >        at
>>> >> >
>>> >> > org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.buildView(FaceletViewDeclarationLanguage.java:329)
>>> >> >        at
>>> >> >
>>> >> > org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:66)
>>> >> >        at
>>> >> >
>>> >> > org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
>>> >> >        ... 16 more
>>> >> >
>>> >> > - Component Tree
>>> >> > <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
>>> >> > <UIViewRoot id="j_id0" inView="true" locale="en_US"
>>> >> > renderKitId="HTML_BASIC"
>>> >> > rendered="true" transient="false" viewId="/home2.xhtml"/> - State
>>> >> > size:548
>>> >> > bytes
>>> >> > - Scoped Variables
>>> >> > <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
>>> >> > Request ParametersNameValue*None*Request
>>> >> > AttributesNameValue*None*View
>>> >> > AttributesNameValue*None*Flash AttributesNameValue*None*Application
>>> >> > AttributesNameValue*None*
>>> >> > Feb 19, 2011 9:52:09 AM - Generated by MyFaces - for information on
>>> >> > disabling or modifying this error-page, see Disabling error handling
>>> >> > in
>>> >> > MyFaces <http://wiki.apache.org/myfaces/Handling_Server_Errors>
>>> >> >
>>> >> > Thank you in advance
>>> >> >
>>> >> > Younes Ouadi
>>> >> >
>>> >>
>>> >>
>>> >>
>>> >> --
>>> >> Jakob Korherr
>>> >>
>>> >> blog: http://www.jakobk.com
>>> >> twitter: http://twitter.com/jakobkorherr
>>> >> work: http://www.irian.at
>>> >
>>> >
>>>
>>>
>>>
>>> --
>>> Jakob Korherr
>>>
>>> blog: http://www.jakobk.com
>>> twitter: http://twitter.com/jakobkorherr
>>> work: http://www.irian.at
>>
>>
>
>
>
> --
> Jakob Korherr
>
> blog: http://www.jakobk.com
> twitter: http://twitter.com/jakobkorherr
> work: http://www.irian.at
>



-- 
Jakob Korherr

blog: http://www.jakobk.com
twitter: http://twitter.com/jakobkorherr
work: http://www.irian.at

Re: JSF Template in Classpath

Posted by Jakob Korherr <ja...@gmail.com>.
Hi,

Resource resource = facesContext.getApplication().getResourceHandler()
               .createResource("templateInClasspath.xhtml", "mytempl");

exactly implements this functionality. It looks for
templateInClasspath.xhtml in /mytempl and in
/META-INF/resources/mytempl just like your tutorial says.

Regards,
Jakob

2011/2/19 Younes Ouadi <yo...@gmail.com>:
> Hi Jakob,
> Many thanks for your prompt reply. I really appreciate it.
> I got your point. It is clear that I'm misusing the '#{resource['...']}'
> mechanism.
> Apart from your proposed solution, how I can instruct MyFaces to behave as
> described in the JEE 6 Tutorial: 'The JavaServer Faces runtime will look for
> the resources in the preceding listed locations, in that order (Web Context
> then Classpath)'?
> You might telling your self: what a lazy guy I'm dealing with. Please,
> forgive me please, it is not my intention.
> I was developing ZK application (v3.6) where I have developed a mechanism to
> load resources from where I need. When I read this part of the Tutorial, I
> said to my self: some code is there to avoid with JSF.
> Many thanks for your valuable help.
> Younes Ouadi
>
> On Sat, Feb 19, 2011 at 1:20 PM, Jakob Korherr <ja...@gmail.com>
> wrote:
>>
>> Hi,
>>
>> That is all true. However, #{resource['...']} gives you a path like
>> /context-root/faces/javax.faces.resource/resourceName.suffix, thus a
>> URL for the browser. In <ui:composition template="..."> you need the
>> path to the file on the server! And this is something else entirely!
>>
>> Regards,
>> Jakob
>>
>> 2011/2/19 Younes Ouadi <yo...@gmail.com>:
>> > Hi Jakob,
>> > Many thanks for your prompt feedback.
>> > In fact, I have understood from 'JEE 6 Tutorial' that JSF
>> > implementations
>> > are expected to manage templates like CSS and JS resources. Please refer
>> > to
>> > the bold parts of below section extracted from the Tutorial page 118:
>> > Web resources are any software artifacts that the web application
>> > requires
>> > for proper rendering, including images, script files, and any
>> > user-created
>> > component libraries. Resources must be collected in a standard location,
>> > which can be one of the following.
>> > ■ A resource packaged in the web application root must be in a
>> > subdirectory
>> > of a resources directory at the web application root:
>> > resources/resource-identifier.
>> > ■ A resource packaged in the web application’s classpath must be in a
>> > subdirectory of the META-INF/resources directory within a web
>> > application: META-INF/resources/resource-identifier.
>> > The JavaServer Faces runtime will look for the resources in the
>> > preceding
>> > listed locations, in that order.
>> > Resource identifiers are unique strings that conform to the following
>> >
>> > format: [locale-prefix/][library-name/][library-version/]resource-name[/resource-version]. Elements
>> > of the resource identifier in brackets ([]) are optional, indicating
>> > that
>> > only a resource-name, which is usually a file name, is a required
>> > element.
>> > Resources can be considered as a library location. Any artifact, such as
>> > a
>> > composite component or a template that is stored in the resources
>> > directory,
>> > becomes accessible to the other application components, which can use it
>> > to
>> > create a resource instance.
>> > END OF JEE 6 TUTORIAL
>> >
>> > From the above, I was expecting that MyFaces would found my resource
>> > 'templateInClasspath.xhtml'.
>> > Anyway, I will use your proposed solution as a workaround for the time
>> > being.
>> > Warm regards.
>> >
>> > Younes Ouadi
>> >
>> > On Sat, Feb 19, 2011 at 12:12 PM, Jakob Korherr
>> > <ja...@gmail.com>
>> > wrote:
>> >>
>> >> Hi Younes,
>> >>
>> >> Unfortunately #resource['...'] does not work that way. You should only
>> >> use it for getting the browser path to HTML resources like css or
>> >> javascript files, e.g.:
>> >>
>> >> <link href="#resource['lib:style.css']" rel="stylesheet" />
>> >>
>> >>
>> >> In your example you need to use Resource.getUrl() in a managed bean,
>> >> so something like that:
>> >>
>> >> <ui:composition template="#{myBean.templatePath}">
>> >>
>> >>
>> >> public String getTemplatePath()
>> >> {
>> >>        FacesContext facesContext = FacesContext.getCurrentInstance();
>> >>
>> >>        Resource resource =
>> >> facesContext.getApplication().getResourceHandler()
>> >>                .createResource("templateInClasspath.xhtml", "mytempl");
>> >>        URL url = resource.getURL();
>> >>
>> >>        return url.toExternalForm();
>> >> }
>> >>
>> >> I hope this helps.
>> >>
>> >> Regards,
>> >> Jakob
>> >>
>> >>
>> >> 2011/2/19 Younes Ouadi <yo...@gmail.com>:
>> >> > Hello deras,
>> >> >
>> >> > I have a hands-on experience with JSF. I have been able to develop a
>> >> > first
>> >> > application. And I'm now in the stage of reorganizing it for a better
>> >> > management. I'm trying to move 'templates' to classpath in order to
>> >> > share
>> >> > them in jar for different applications. But I'm stack there. Pages
>> >> > that
>> >> > reference that template are not rendered and MyFaces returns the
>> >> > error
>> >> > (see
>> >> > below for full details of the error): java.io.FileNotFoundException:
>> >> >
>> >> >
>> >> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>> >> > Not Found in ExternalContext as a Resource
>> >> >
>> >> > Please help in pointing the missing part in my application.
>> >> >
>> >> > *1) Project:*
>> >> > *1.1) Hierarchy*
>> >> > lab-jsf-rsrcmng
>> >> > *    pom.xml*
>> >> >    src/main/webapp
>> >> > *        home2.xhtml*
>> >> >        WEB-INF
>> >> > *            faces-config.xml*
>> >> > *            web.xml*
>> >> >    src/main/resources/META-INF/resources/mytempl
>> >> > *        templateInClasspath.xhtml*
>> >> > *
>> >> > *
>> >> > *1.2) pom.xml*
>> >> > <project
>> >> > xmlns="http://maven.apache.org/POM/4.0.0"
>> >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >> > xsi:schemaLocation="
>> >> > http://maven.apache.org/POM/4.0.0
>> >> > http://maven.apache.org/xsd/maven-4.0.0.xsd
>> >> > "
>> >> >>
>> >> > <modelVersion>4.0.0</modelVersion>
>> >> >
>> >> > <groupId>lab-jsf</groupId>
>> >> > <artifactId>lab-jsf-rsrcmng</artifactId>
>> >> > <packaging>war</packaging>
>> >> > <version>0.0.1-SNAPSHOT</version>
>> >> >
>> >> > <name>LAB::JSF::RESOURCE MANAGEMENT</name>
>> >> > <url>http://maven.apache.org</url>
>> >> >
>> >> > <properties>
>> >> > <servlet.version>2.5</servlet.version>
>> >> > <jsp.version>2.1</jsp.version>
>> >> > <myfaces.version>2.0.3</myfaces.version>
>> >> > </properties>
>> >> >
>> >> > <dependencies>
>> >> > <dependency>
>> >> > <groupId>javax.servlet</groupId>
>> >> > <artifactId>servlet-api</artifactId>
>> >> > <version>${servlet.version}</version>
>> >> > <scope>provided</scope>
>> >> > </dependency>
>> >> > <dependency>
>> >> > <groupId>javax.servlet.jsp</groupId>
>> >> > <artifactId>jsp-api</artifactId>
>> >> > <version>${jsp.version}</version>
>> >> > <scope>provided</scope>
>> >> > </dependency>
>> >> > <dependency>
>> >> > <groupId>org.apache.myfaces.core</groupId>
>> >> > <artifactId>myfaces-api</artifactId>
>> >> > <version>${myfaces.version}</version>
>> >> > </dependency>
>> >> > <dependency>
>> >> > <groupId>org.apache.myfaces.core</groupId>
>> >> > <artifactId>myfaces-impl</artifactId>
>> >> > <version>${myfaces.version}</version>
>> >> > </dependency>
>> >> > <dependency>
>> >> > <groupId>junit</groupId>
>> >> > <artifactId>junit</artifactId>
>> >> > <version>4.8.2</version>
>> >> > <scope>test</scope>
>> >> > </dependency>
>> >> > </dependencies>
>> >> >
>> >> > <build>
>> >> > <plugins>
>> >> > <plugin>
>> >> > <groupId>org.apache.maven.plugins</groupId>
>> >> > <artifactId>maven-compiler-plugin</artifactId>
>> >> > <version>2.0.2</version>
>> >> > <configuration>
>> >> > <source>1.5</source>
>> >> > <target>1.5</target>
>> >> > </configuration>
>> >> > </plugin>
>> >> > </plugins>
>> >> > <finalName>${project.artifactId}</finalName>
>> >> > </build>
>> >> > </project>
>> >> >
>> >> > *1.3) home2.xhtml*
>> >> > <?xml version="1.0" encoding="UTF-8"?>
>> >> >
>> >> > <!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:h="http://java.sun.com/jsf/html"
>> >> > xmlns:ui="http://java.sun.com/jsf/facelets"
>> >> >>
>> >> > <h:body>
>> >> > <ui:composition
>> >> > template="#{resource['mytempl:templateInClasspath.xhtml']}">
>> >> > </ui:composition>
>> >> > </h:body>
>> >> > </html>
>> >> >
>> >> >
>> >> >
>> >> > *1.4) faces-config.xml*
>> >> > <?xml version="1.0" encoding="UTF-8"?>
>> >> >
>> >> > <faces-config
>> >> > xmlns="http://java.sun.com/xml/ns/javaee"
>> >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >> > xsi:schemaLocation="
>> >> > http://java.sun.com/xml/ns/javaee
>> >> > http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd
>> >> > "
>> >> > version="2.0"
>> >> >>
>> >> > </faces-config>
>> >> >
>> >> >
>> >> > *1.5) web.xml:*
>> >> > <?xml version="1.0" encoding="UTF-8"?>
>> >> >
>> >> > <web-app
>> >> > version="2.5"
>> >> > xmlns="http://java.sun.com/xml/ns/javaee"
>> >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >> > xsi:schemaLocation="
>> >> > http://java.sun.com/xml/ns/javaee
>> >> > http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
>> >> > "
>> >> >>
>> >> > <display-name>lab-jsf-rsrcmng</display-name>
>> >> > <session-config>
>> >> > <session-timeout>30</session-timeout>
>> >> > </session-config>
>> >> > <welcome-file-list>
>> >> > <welcome-file>home2.xhtml</welcome-file>
>> >> > </welcome-file-list>
>> >> > <servlet>
>> >> > <servlet-name>Faces Servlet</servlet-name>
>> >> > <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
>> >> > <load-on-startup>1</load-on-startup>
>> >> > </servlet>
>> >> > <servlet-mapping>
>> >> > <servlet-name>Faces Servlet</servlet-name>
>> >> > <url-pattern>/faces/*</url-pattern>
>> >> > <url-pattern>*.xhtml</url-pattern>
>> >> > </servlet-mapping>
>> >> > <context-param>
>> >> > <description>
>> >> > If true, a javascript function will be rendered that is able to
>> >> > restore
>> >> > the
>> >> > former vertical scroll on every request. Convenient feature if you
>> >> > have
>> >> > pages
>> >> > with long lists and you do not want the browser page to always jump
>> >> > to
>> >> > the
>> >> > top
>> >> > if you trigger a link or button action that stays on the same page.
>> >> > Default is 'false'
>> >> > </description>
>> >> > <param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
>> >> > <param-value>true</param-value>
>> >> > </context-param>
>> >> > <context-param>
>> >> > <param-name>org.apache.myfaces.USE_ENCRYPTION</param-name>
>> >> > <param-value>false</param-value>
>> >> > </context-param>
>> >> > </web-app>
>> >> >
>> >> >
>> >> > *1.6) templateInClasspath.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:c="http://java.sun.com/jsp/jstl/core"
>> >> > xmlns:f="http://java.sun.com/jsf/core"
>> >> > xmlns:h="http://java.sun.com/jsf/html"
>> >> > xmlns:ui="http://java.sun.com/jsf/facelets"
>> >> >>
>> >> > <f:view contentType="text/html">
>> >> > <h:head>
>> >> > <title>LAB::JSF::RSRCMNG</title>
>> >> > <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
>> >> > </h:head>
>> >> > <h:body styleClass="natisoft-body" >
>> >> > <h:panelGrid columns="1">
>> >> > <f:facet name="header">
>> >> > <ui:insert name="header">Header</ui:insert>
>> >> > </f:facet>
>> >> >
>> >> > <f:facet name="footer">
>> >> > <ui:insert name="trailer">Trailer</ui:insert>
>> >> > </f:facet>
>> >> >
>> >> > <h:panelGroup>
>> >> > <ui:insert name="content">Content</ui:insert>
>> >> > </h:panelGroup>
>> >> > </h:panelGrid>
>> >> > </h:body>
>> >> > </f:view>
>> >> > </html>
>> >> >
>> >> > *2) Error details*
>> >> >
>> >> > An Error Occurred:
>> >> > java.io.FileNotFoundException:
>> >> >
>> >> >
>> >> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>> >> > Not Found in ExternalContext as a Resource
>> >> >
>> >> > Caused by:
>> >> > java.io.FileNotFoundException -
>> >> >
>> >> >
>> >> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>> >> > Not Found in ExternalContext as a Resource
>> >> > - Stack Trace <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
>> >> >
>> >> > javax.faces.FacesException: java.io.FileNotFoundException:
>> >> >
>> >> >
>> >> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>> >> > Not Found in ExternalContext as a Resource
>> >> >        at
>> >> >
>> >> > org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241)
>> >> >        at
>> >> >
>> >> > org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156)
>> >> >        at
>> >> >
>> >> > org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:258)
>> >> >        at
>> >> > javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
>> >> >        at
>> >> >
>> >> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
>> >> >        at
>> >> >
>> >> > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>> >> >        at
>> >> >
>> >> > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
>> >> >        at
>> >> >
>> >> > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
>> >> >        at
>> >> >
>> >> > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
>> >> >        at
>> >> >
>> >> > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
>> >> >        at
>> >> >
>> >> > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
>> >> >        at
>> >> >
>> >> > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>> >> >        at
>> >> >
>> >> > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
>> >> >        at
>> >> >
>> >> > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
>> >> >        at
>> >> >
>> >> > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
>> >> >        at
>> >> >
>> >> > org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281)
>> >> >        at
>> >> >
>> >> > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>> >> >        at
>> >> >
>> >> > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>> >> >        at java.lang.Thread.run(Thread.java:619)
>> >> > Caused by: java.io.FileNotFoundException:
>> >> >
>> >> >
>> >> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>> >> > Not Found in ExternalContext as a Resource
>> >> >        at
>> >> >
>> >> > org.apache.myfaces.view.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:199)
>> >> >        at
>> >> >
>> >> > org.apache.myfaces.view.facelets.impl.DefaultFacelet.getRelativePath(DefaultFacelet.java:289)
>> >> >        at
>> >> >
>> >> > org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:346)
>> >> >        at
>> >> >
>> >> > org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:215)
>> >> >        at
>> >> >
>> >> > org.apache.myfaces.view.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:140)
>> >> >        at
>> >> >
>> >> > org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:57)
>> >> >        at
>> >> >
>> >> > org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:45)
>> >> >        at
>> >> >
>> >> > org.apache.myfaces.view.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:143)
>> >> >        at
>> >> >
>> >> > org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.buildView(FaceletViewDeclarationLanguage.java:329)
>> >> >        at
>> >> >
>> >> > org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:66)
>> >> >        at
>> >> >
>> >> > org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
>> >> >        ... 16 more
>> >> >
>> >> > - Component Tree
>> >> > <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
>> >> > <UIViewRoot id="j_id0" inView="true" locale="en_US"
>> >> > renderKitId="HTML_BASIC"
>> >> > rendered="true" transient="false" viewId="/home2.xhtml"/> - State
>> >> > size:548
>> >> > bytes
>> >> > - Scoped Variables
>> >> > <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
>> >> > Request ParametersNameValue*None*Request
>> >> > AttributesNameValue*None*View
>> >> > AttributesNameValue*None*Flash AttributesNameValue*None*Application
>> >> > AttributesNameValue*None*
>> >> > Feb 19, 2011 9:52:09 AM - Generated by MyFaces - for information on
>> >> > disabling or modifying this error-page, see Disabling error handling
>> >> > in
>> >> > MyFaces <http://wiki.apache.org/myfaces/Handling_Server_Errors>
>> >> >
>> >> > Thank you in advance
>> >> >
>> >> > Younes Ouadi
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Jakob Korherr
>> >>
>> >> blog: http://www.jakobk.com
>> >> twitter: http://twitter.com/jakobkorherr
>> >> work: http://www.irian.at
>> >
>> >
>>
>>
>>
>> --
>> Jakob Korherr
>>
>> blog: http://www.jakobk.com
>> twitter: http://twitter.com/jakobkorherr
>> work: http://www.irian.at
>
>



-- 
Jakob Korherr

blog: http://www.jakobk.com
twitter: http://twitter.com/jakobkorherr
work: http://www.irian.at

Re: JSF Template in Classpath

Posted by Younes Ouadi <yo...@gmail.com>.
Hi Jakob,

Many thanks for your prompt reply. I really appreciate it.

I got your point. It is clear that I'm misusing the '#{resource['...']}'
mechanism.

Apart from your proposed solution, how I can instruct MyFaces to behave as
described in the JEE 6 Tutorial: 'The JavaServer Faces runtime will look for
the resources in the preceding listed locations, in that order (Web Context
then Classpath)'?

You might telling your self: what a lazy guy I'm dealing with. Please,
forgive me please, it is not my intention.

I was developing ZK application (v3.6) where I have developed a mechanism to
load resources from where I need. When I read this part of the Tutorial, I
said to my self: some code is there to avoid with JSF.

Many thanks for your valuable help.

Younes Ouadi

On Sat, Feb 19, 2011 at 1:20 PM, Jakob Korherr <ja...@gmail.com>wrote:

> Hi,
>
> That is all true. However, #{resource['...']} gives you a path like
> /context-root/faces/javax.faces.resource/resourceName.suffix, thus a
> URL for the browser. In <ui:composition template="..."> you need the
> path to the file on the server! And this is something else entirely!
>
> Regards,
> Jakob
>
> 2011/2/19 Younes Ouadi <yo...@gmail.com>:
> > Hi Jakob,
> > Many thanks for your prompt feedback.
> > In fact, I have understood from 'JEE 6 Tutorial' that JSF implementations
> > are expected to manage templates like CSS and JS resources. Please refer
> to
> > the bold parts of below section extracted from the Tutorial page 118:
> > Web resources are any software artifacts that the web application
> requires
> > for proper rendering, including images, script files, and any
> user-created
> > component libraries. Resources must be collected in a standard location,
> > which can be one of the following.
> > ■ A resource packaged in the web application root must be in a
> subdirectory
> > of a resources directory at the web application root:
> > resources/resource-identifier.
> > ■ A resource packaged in the web application’s classpath must be in a
> > subdirectory of the META-INF/resources directory within a web
> > application: META-INF/resources/resource-identifier.
> > The JavaServer Faces runtime will look for the resources in the preceding
> > listed locations, in that order.
> > Resource identifiers are unique strings that conform to the following
> >
> format: [locale-prefix/][library-name/][library-version/]resource-name[/resource-version]. Elements
> > of the resource identifier in brackets ([]) are optional, indicating that
> > only a resource-name, which is usually a file name, is a required
> element.
> > Resources can be considered as a library location. Any artifact, such as
> a
> > composite component or a template that is stored in the resources
> directory,
> > becomes accessible to the other application components, which can use it
> to
> > create a resource instance.
> > END OF JEE 6 TUTORIAL
> >
> > From the above, I was expecting that MyFaces would found my resource
> > 'templateInClasspath.xhtml'.
> > Anyway, I will use your proposed solution as a workaround for the time
> > being.
> > Warm regards.
> >
> > Younes Ouadi
> >
> > On Sat, Feb 19, 2011 at 12:12 PM, Jakob Korherr <jakob.korherr@gmail.com
> >
> > wrote:
> >>
> >> Hi Younes,
> >>
> >> Unfortunately #resource['...'] does not work that way. You should only
> >> use it for getting the browser path to HTML resources like css or
> >> javascript files, e.g.:
> >>
> >> <link href="#resource['lib:style.css']" rel="stylesheet" />
> >>
> >>
> >> In your example you need to use Resource.getUrl() in a managed bean,
> >> so something like that:
> >>
> >> <ui:composition template="#{myBean.templatePath}">
> >>
> >>
> >> public String getTemplatePath()
> >> {
> >>        FacesContext facesContext = FacesContext.getCurrentInstance();
> >>
> >>        Resource resource =
> >> facesContext.getApplication().getResourceHandler()
> >>                .createResource("templateInClasspath.xhtml", "mytempl");
> >>        URL url = resource.getURL();
> >>
> >>        return url.toExternalForm();
> >> }
> >>
> >> I hope this helps.
> >>
> >> Regards,
> >> Jakob
> >>
> >>
> >> 2011/2/19 Younes Ouadi <yo...@gmail.com>:
> >> > Hello deras,
> >> >
> >> > I have a hands-on experience with JSF. I have been able to develop a
> >> > first
> >> > application. And I'm now in the stage of reorganizing it for a better
> >> > management. I'm trying to move 'templates' to classpath in order to
> >> > share
> >> > them in jar for different applications. But I'm stack there. Pages
> that
> >> > reference that template are not rendered and MyFaces returns the error
> >> > (see
> >> > below for full details of the error): java.io.FileNotFoundException:
> >> >
> >> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> >> > Not Found in ExternalContext as a Resource
> >> >
> >> > Please help in pointing the missing part in my application.
> >> >
> >> > *1) Project:*
> >> > *1.1) Hierarchy*
> >> > lab-jsf-rsrcmng
> >> > *    pom.xml*
> >> >    src/main/webapp
> >> > *        home2.xhtml*
> >> >        WEB-INF
> >> > *            faces-config.xml*
> >> > *            web.xml*
> >> >    src/main/resources/META-INF/resources/mytempl
> >> > *        templateInClasspath.xhtml*
> >> > *
> >> > *
> >> > *1.2) pom.xml*
> >> > <project
> >> > xmlns="http://maven.apache.org/POM/4.0.0"
> >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> > xsi:schemaLocation="
> >> > http://maven.apache.org/POM/4.0.0
> >> > http://maven.apache.org/xsd/maven-4.0.0.xsd
> >> > "
> >> >>
> >> > <modelVersion>4.0.0</modelVersion>
> >> >
> >> > <groupId>lab-jsf</groupId>
> >> > <artifactId>lab-jsf-rsrcmng</artifactId>
> >> > <packaging>war</packaging>
> >> > <version>0.0.1-SNAPSHOT</version>
> >> >
> >> > <name>LAB::JSF::RESOURCE MANAGEMENT</name>
> >> > <url>http://maven.apache.org</url>
> >> >
> >> > <properties>
> >> > <servlet.version>2.5</servlet.version>
> >> > <jsp.version>2.1</jsp.version>
> >> > <myfaces.version>2.0.3</myfaces.version>
> >> > </properties>
> >> >
> >> > <dependencies>
> >> > <dependency>
> >> > <groupId>javax.servlet</groupId>
> >> > <artifactId>servlet-api</artifactId>
> >> > <version>${servlet.version}</version>
> >> > <scope>provided</scope>
> >> > </dependency>
> >> > <dependency>
> >> > <groupId>javax.servlet.jsp</groupId>
> >> > <artifactId>jsp-api</artifactId>
> >> > <version>${jsp.version}</version>
> >> > <scope>provided</scope>
> >> > </dependency>
> >> > <dependency>
> >> > <groupId>org.apache.myfaces.core</groupId>
> >> > <artifactId>myfaces-api</artifactId>
> >> > <version>${myfaces.version}</version>
> >> > </dependency>
> >> > <dependency>
> >> > <groupId>org.apache.myfaces.core</groupId>
> >> > <artifactId>myfaces-impl</artifactId>
> >> > <version>${myfaces.version}</version>
> >> > </dependency>
> >> > <dependency>
> >> > <groupId>junit</groupId>
> >> > <artifactId>junit</artifactId>
> >> > <version>4.8.2</version>
> >> > <scope>test</scope>
> >> > </dependency>
> >> > </dependencies>
> >> >
> >> > <build>
> >> > <plugins>
> >> > <plugin>
> >> > <groupId>org.apache.maven.plugins</groupId>
> >> > <artifactId>maven-compiler-plugin</artifactId>
> >> > <version>2.0.2</version>
> >> > <configuration>
> >> > <source>1.5</source>
> >> > <target>1.5</target>
> >> > </configuration>
> >> > </plugin>
> >> > </plugins>
> >> > <finalName>${project.artifactId}</finalName>
> >> > </build>
> >> > </project>
> >> >
> >> > *1.3) home2.xhtml*
> >> > <?xml version="1.0" encoding="UTF-8"?>
> >> >
> >> > <!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:h="http://java.sun.com/jsf/html"
> >> > xmlns:ui="http://java.sun.com/jsf/facelets"
> >> >>
> >> > <h:body>
> >> > <ui:composition
> >> > template="#{resource['mytempl:templateInClasspath.xhtml']}">
> >> > </ui:composition>
> >> > </h:body>
> >> > </html>
> >> >
> >> >
> >> >
> >> > *1.4) faces-config.xml*
> >> > <?xml version="1.0" encoding="UTF-8"?>
> >> >
> >> > <faces-config
> >> > xmlns="http://java.sun.com/xml/ns/javaee"
> >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> > xsi:schemaLocation="
> >> > http://java.sun.com/xml/ns/javaee
> >> > http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd
> >> > "
> >> > version="2.0"
> >> >>
> >> > </faces-config>
> >> >
> >> >
> >> > *1.5) web.xml:*
> >> > <?xml version="1.0" encoding="UTF-8"?>
> >> >
> >> > <web-app
> >> > version="2.5"
> >> > xmlns="http://java.sun.com/xml/ns/javaee"
> >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> > xsi:schemaLocation="
> >> > http://java.sun.com/xml/ns/javaee
> >> > http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
> >> > "
> >> >>
> >> > <display-name>lab-jsf-rsrcmng</display-name>
> >> > <session-config>
> >> > <session-timeout>30</session-timeout>
> >> > </session-config>
> >> > <welcome-file-list>
> >> > <welcome-file>home2.xhtml</welcome-file>
> >> > </welcome-file-list>
> >> > <servlet>
> >> > <servlet-name>Faces Servlet</servlet-name>
> >> > <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
> >> > <load-on-startup>1</load-on-startup>
> >> > </servlet>
> >> > <servlet-mapping>
> >> > <servlet-name>Faces Servlet</servlet-name>
> >> > <url-pattern>/faces/*</url-pattern>
> >> > <url-pattern>*.xhtml</url-pattern>
> >> > </servlet-mapping>
> >> > <context-param>
> >> > <description>
> >> > If true, a javascript function will be rendered that is able to
> restore
> >> > the
> >> > former vertical scroll on every request. Convenient feature if you
> have
> >> > pages
> >> > with long lists and you do not want the browser page to always jump to
> >> > the
> >> > top
> >> > if you trigger a link or button action that stays on the same page.
> >> > Default is 'false'
> >> > </description>
> >> > <param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
> >> > <param-value>true</param-value>
> >> > </context-param>
> >> > <context-param>
> >> > <param-name>org.apache.myfaces.USE_ENCRYPTION</param-name>
> >> > <param-value>false</param-value>
> >> > </context-param>
> >> > </web-app>
> >> >
> >> >
> >> > *1.6) templateInClasspath.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:c="http://java.sun.com/jsp/jstl/core"
> >> > xmlns:f="http://java.sun.com/jsf/core"
> >> > xmlns:h="http://java.sun.com/jsf/html"
> >> > xmlns:ui="http://java.sun.com/jsf/facelets"
> >> >>
> >> > <f:view contentType="text/html">
> >> > <h:head>
> >> > <title>LAB::JSF::RSRCMNG</title>
> >> > <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
> >> > </h:head>
> >> > <h:body styleClass="natisoft-body" >
> >> > <h:panelGrid columns="1">
> >> > <f:facet name="header">
> >> > <ui:insert name="header">Header</ui:insert>
> >> > </f:facet>
> >> >
> >> > <f:facet name="footer">
> >> > <ui:insert name="trailer">Trailer</ui:insert>
> >> > </f:facet>
> >> >
> >> > <h:panelGroup>
> >> > <ui:insert name="content">Content</ui:insert>
> >> > </h:panelGroup>
> >> > </h:panelGrid>
> >> > </h:body>
> >> > </f:view>
> >> > </html>
> >> >
> >> > *2) Error details*
> >> >
> >> > An Error Occurred:
> >> > java.io.FileNotFoundException:
> >> >
> >> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> >> > Not Found in ExternalContext as a Resource
> >> >
> >> > Caused by:
> >> > java.io.FileNotFoundException -
> >> >
> >> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> >> > Not Found in ExternalContext as a Resource
> >> > - Stack Trace <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
> >> >
> >> > javax.faces.FacesException: java.io.FileNotFoundException:
> >> >
> >> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> >> > Not Found in ExternalContext as a Resource
> >> >        at
> >> >
> org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241)
> >> >        at
> >> >
> org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156)
> >> >        at
> >> >
> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:258)
> >> >        at
> javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
> >> >        at
> >> >
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
> >> >        at
> >> >
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> >> >        at
> >> >
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
> >> >        at
> >> >
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
> >> >        at
> >> >
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> >> >        at
> >> >
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
> >> >        at
> >> >
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
> >> >        at
> >> >
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> >> >        at
> >> >
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
> >> >        at
> >> >
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
> >> >        at
> >> >
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
> >> >        at
> >> >
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281)
> >> >        at
> >> >
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> >> >        at
> >> >
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> >> >        at java.lang.Thread.run(Thread.java:619)
> >> > Caused by: java.io.FileNotFoundException:
> >> >
> >> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> >> > Not Found in ExternalContext as a Resource
> >> >        at
> >> >
> org.apache.myfaces.view.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:199)
> >> >        at
> >> >
> org.apache.myfaces.view.facelets.impl.DefaultFacelet.getRelativePath(DefaultFacelet.java:289)
> >> >        at
> >> >
> org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:346)
> >> >        at
> >> >
> org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:215)
> >> >        at
> >> >
> org.apache.myfaces.view.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:140)
> >> >        at
> >> >
> org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:57)
> >> >        at
> >> >
> org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:45)
> >> >        at
> >> >
> org.apache.myfaces.view.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:143)
> >> >        at
> >> >
> org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.buildView(FaceletViewDeclarationLanguage.java:329)
> >> >        at
> >> >
> org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:66)
> >> >        at
> >> >
> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
> >> >        ... 16 more
> >> >
> >> > - Component Tree <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#
> >
> >> > <UIViewRoot id="j_id0" inView="true" locale="en_US"
> >> > renderKitId="HTML_BASIC"
> >> > rendered="true" transient="false" viewId="/home2.xhtml"/> - State
> >> > size:548
> >> > bytes
> >> > - Scoped Variables <
> http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
> >> > Request ParametersNameValue*None*Request AttributesNameValue*None*View
> >> > AttributesNameValue*None*Flash AttributesNameValue*None*Application
> >> > AttributesNameValue*None*
> >> > Feb 19, 2011 9:52:09 AM - Generated by MyFaces - for information on
> >> > disabling or modifying this error-page, see Disabling error handling
> in
> >> > MyFaces <http://wiki.apache.org/myfaces/Handling_Server_Errors>
> >> >
> >> > Thank you in advance
> >> >
> >> > Younes Ouadi
> >> >
> >>
> >>
> >>
> >> --
> >> Jakob Korherr
> >>
> >> blog: http://www.jakobk.com
> >> twitter: http://twitter.com/jakobkorherr
> >> work: http://www.irian.at
> >
> >
>
>
>
> --
> Jakob Korherr
>
> blog: http://www.jakobk.com
> twitter: http://twitter.com/jakobkorherr
> work: http://www.irian.at
>

Re: JSF Template in Classpath

Posted by Jakob Korherr <ja...@gmail.com>.
Hi,

That is all true. However, #{resource['...']} gives you a path like
/context-root/faces/javax.faces.resource/resourceName.suffix, thus a
URL for the browser. In <ui:composition template="..."> you need the
path to the file on the server! And this is something else entirely!

Regards,
Jakob

2011/2/19 Younes Ouadi <yo...@gmail.com>:
> Hi Jakob,
> Many thanks for your prompt feedback.
> In fact, I have understood from 'JEE 6 Tutorial' that JSF implementations
> are expected to manage templates like CSS and JS resources. Please refer to
> the bold parts of below section extracted from the Tutorial page 118:
> Web resources are any software artifacts that the web application requires
> for proper rendering, including images, script files, and any user-created
> component libraries. Resources must be collected in a standard location,
> which can be one of the following.
> ■ A resource packaged in the web application root must be in a subdirectory
> of a resources directory at the web application root:
> resources/resource-identifier.
> ■ A resource packaged in the web application’s classpath must be in a
> subdirectory of the META-INF/resources directory within a web
> application: META-INF/resources/resource-identifier.
> The JavaServer Faces runtime will look for the resources in the preceding
> listed locations, in that order.
> Resource identifiers are unique strings that conform to the following
> format: [locale-prefix/][library-name/][library-version/]resource-name[/resource-version]. Elements
> of the resource identifier in brackets ([]) are optional, indicating that
> only a resource-name, which is usually a file name, is a required element.
> Resources can be considered as a library location. Any artifact, such as a
> composite component or a template that is stored in the resources directory,
> becomes accessible to the other application components, which can use it to
> create a resource instance.
> END OF JEE 6 TUTORIAL
>
> From the above, I was expecting that MyFaces would found my resource
> 'templateInClasspath.xhtml'.
> Anyway, I will use your proposed solution as a workaround for the time
> being.
> Warm regards.
>
> Younes Ouadi
>
> On Sat, Feb 19, 2011 at 12:12 PM, Jakob Korherr <ja...@gmail.com>
> wrote:
>>
>> Hi Younes,
>>
>> Unfortunately #resource['...'] does not work that way. You should only
>> use it for getting the browser path to HTML resources like css or
>> javascript files, e.g.:
>>
>> <link href="#resource['lib:style.css']" rel="stylesheet" />
>>
>>
>> In your example you need to use Resource.getUrl() in a managed bean,
>> so something like that:
>>
>> <ui:composition template="#{myBean.templatePath}">
>>
>>
>> public String getTemplatePath()
>> {
>>        FacesContext facesContext = FacesContext.getCurrentInstance();
>>
>>        Resource resource =
>> facesContext.getApplication().getResourceHandler()
>>                .createResource("templateInClasspath.xhtml", "mytempl");
>>        URL url = resource.getURL();
>>
>>        return url.toExternalForm();
>> }
>>
>> I hope this helps.
>>
>> Regards,
>> Jakob
>>
>>
>> 2011/2/19 Younes Ouadi <yo...@gmail.com>:
>> > Hello deras,
>> >
>> > I have a hands-on experience with JSF. I have been able to develop a
>> > first
>> > application. And I'm now in the stage of reorganizing it for a better
>> > management. I'm trying to move 'templates' to classpath in order to
>> > share
>> > them in jar for different applications. But I'm stack there. Pages that
>> > reference that template are not rendered and MyFaces returns the error
>> > (see
>> > below for full details of the error): java.io.FileNotFoundException:
>> >
>> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>> > Not Found in ExternalContext as a Resource
>> >
>> > Please help in pointing the missing part in my application.
>> >
>> > *1) Project:*
>> > *1.1) Hierarchy*
>> > lab-jsf-rsrcmng
>> > *    pom.xml*
>> >    src/main/webapp
>> > *        home2.xhtml*
>> >        WEB-INF
>> > *            faces-config.xml*
>> > *            web.xml*
>> >    src/main/resources/META-INF/resources/mytempl
>> > *        templateInClasspath.xhtml*
>> > *
>> > *
>> > *1.2) pom.xml*
>> > <project
>> > xmlns="http://maven.apache.org/POM/4.0.0"
>> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> > xsi:schemaLocation="
>> > http://maven.apache.org/POM/4.0.0
>> > http://maven.apache.org/xsd/maven-4.0.0.xsd
>> > "
>> >>
>> > <modelVersion>4.0.0</modelVersion>
>> >
>> > <groupId>lab-jsf</groupId>
>> > <artifactId>lab-jsf-rsrcmng</artifactId>
>> > <packaging>war</packaging>
>> > <version>0.0.1-SNAPSHOT</version>
>> >
>> > <name>LAB::JSF::RESOURCE MANAGEMENT</name>
>> > <url>http://maven.apache.org</url>
>> >
>> > <properties>
>> > <servlet.version>2.5</servlet.version>
>> > <jsp.version>2.1</jsp.version>
>> > <myfaces.version>2.0.3</myfaces.version>
>> > </properties>
>> >
>> > <dependencies>
>> > <dependency>
>> > <groupId>javax.servlet</groupId>
>> > <artifactId>servlet-api</artifactId>
>> > <version>${servlet.version}</version>
>> > <scope>provided</scope>
>> > </dependency>
>> > <dependency>
>> > <groupId>javax.servlet.jsp</groupId>
>> > <artifactId>jsp-api</artifactId>
>> > <version>${jsp.version}</version>
>> > <scope>provided</scope>
>> > </dependency>
>> > <dependency>
>> > <groupId>org.apache.myfaces.core</groupId>
>> > <artifactId>myfaces-api</artifactId>
>> > <version>${myfaces.version}</version>
>> > </dependency>
>> > <dependency>
>> > <groupId>org.apache.myfaces.core</groupId>
>> > <artifactId>myfaces-impl</artifactId>
>> > <version>${myfaces.version}</version>
>> > </dependency>
>> > <dependency>
>> > <groupId>junit</groupId>
>> > <artifactId>junit</artifactId>
>> > <version>4.8.2</version>
>> > <scope>test</scope>
>> > </dependency>
>> > </dependencies>
>> >
>> > <build>
>> > <plugins>
>> > <plugin>
>> > <groupId>org.apache.maven.plugins</groupId>
>> > <artifactId>maven-compiler-plugin</artifactId>
>> > <version>2.0.2</version>
>> > <configuration>
>> > <source>1.5</source>
>> > <target>1.5</target>
>> > </configuration>
>> > </plugin>
>> > </plugins>
>> > <finalName>${project.artifactId}</finalName>
>> > </build>
>> > </project>
>> >
>> > *1.3) home2.xhtml*
>> > <?xml version="1.0" encoding="UTF-8"?>
>> >
>> > <!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:h="http://java.sun.com/jsf/html"
>> > xmlns:ui="http://java.sun.com/jsf/facelets"
>> >>
>> > <h:body>
>> > <ui:composition
>> > template="#{resource['mytempl:templateInClasspath.xhtml']}">
>> > </ui:composition>
>> > </h:body>
>> > </html>
>> >
>> >
>> >
>> > *1.4) faces-config.xml*
>> > <?xml version="1.0" encoding="UTF-8"?>
>> >
>> > <faces-config
>> > xmlns="http://java.sun.com/xml/ns/javaee"
>> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> > xsi:schemaLocation="
>> > http://java.sun.com/xml/ns/javaee
>> > http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd
>> > "
>> > version="2.0"
>> >>
>> > </faces-config>
>> >
>> >
>> > *1.5) web.xml:*
>> > <?xml version="1.0" encoding="UTF-8"?>
>> >
>> > <web-app
>> > version="2.5"
>> > xmlns="http://java.sun.com/xml/ns/javaee"
>> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> > xsi:schemaLocation="
>> > http://java.sun.com/xml/ns/javaee
>> > http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
>> > "
>> >>
>> > <display-name>lab-jsf-rsrcmng</display-name>
>> > <session-config>
>> > <session-timeout>30</session-timeout>
>> > </session-config>
>> > <welcome-file-list>
>> > <welcome-file>home2.xhtml</welcome-file>
>> > </welcome-file-list>
>> > <servlet>
>> > <servlet-name>Faces Servlet</servlet-name>
>> > <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
>> > <load-on-startup>1</load-on-startup>
>> > </servlet>
>> > <servlet-mapping>
>> > <servlet-name>Faces Servlet</servlet-name>
>> > <url-pattern>/faces/*</url-pattern>
>> > <url-pattern>*.xhtml</url-pattern>
>> > </servlet-mapping>
>> > <context-param>
>> > <description>
>> > If true, a javascript function will be rendered that is able to restore
>> > the
>> > former vertical scroll on every request. Convenient feature if you have
>> > pages
>> > with long lists and you do not want the browser page to always jump to
>> > the
>> > top
>> > if you trigger a link or button action that stays on the same page.
>> > Default is 'false'
>> > </description>
>> > <param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
>> > <param-value>true</param-value>
>> > </context-param>
>> > <context-param>
>> > <param-name>org.apache.myfaces.USE_ENCRYPTION</param-name>
>> > <param-value>false</param-value>
>> > </context-param>
>> > </web-app>
>> >
>> >
>> > *1.6) templateInClasspath.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:c="http://java.sun.com/jsp/jstl/core"
>> > xmlns:f="http://java.sun.com/jsf/core"
>> > xmlns:h="http://java.sun.com/jsf/html"
>> > xmlns:ui="http://java.sun.com/jsf/facelets"
>> >>
>> > <f:view contentType="text/html">
>> > <h:head>
>> > <title>LAB::JSF::RSRCMNG</title>
>> > <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
>> > </h:head>
>> > <h:body styleClass="natisoft-body" >
>> > <h:panelGrid columns="1">
>> > <f:facet name="header">
>> > <ui:insert name="header">Header</ui:insert>
>> > </f:facet>
>> >
>> > <f:facet name="footer">
>> > <ui:insert name="trailer">Trailer</ui:insert>
>> > </f:facet>
>> >
>> > <h:panelGroup>
>> > <ui:insert name="content">Content</ui:insert>
>> > </h:panelGroup>
>> > </h:panelGrid>
>> > </h:body>
>> > </f:view>
>> > </html>
>> >
>> > *2) Error details*
>> >
>> > An Error Occurred:
>> > java.io.FileNotFoundException:
>> >
>> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>> > Not Found in ExternalContext as a Resource
>> >
>> > Caused by:
>> > java.io.FileNotFoundException -
>> >
>> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>> > Not Found in ExternalContext as a Resource
>> > - Stack Trace <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
>> >
>> > javax.faces.FacesException: java.io.FileNotFoundException:
>> >
>> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>> > Not Found in ExternalContext as a Resource
>> >        at
>> > org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241)
>> >        at
>> > org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156)
>> >        at
>> > org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:258)
>> >        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
>> >        at
>> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
>> >        at
>> > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>> >        at
>> > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
>> >        at
>> > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
>> >        at
>> > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
>> >        at
>> > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
>> >        at
>> > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
>> >        at
>> > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>> >        at
>> > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
>> >        at
>> > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
>> >        at
>> > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
>> >        at
>> > org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281)
>> >        at
>> > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>> >        at
>> > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>> >        at java.lang.Thread.run(Thread.java:619)
>> > Caused by: java.io.FileNotFoundException:
>> >
>> > /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
>> > Not Found in ExternalContext as a Resource
>> >        at
>> > org.apache.myfaces.view.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:199)
>> >        at
>> > org.apache.myfaces.view.facelets.impl.DefaultFacelet.getRelativePath(DefaultFacelet.java:289)
>> >        at
>> > org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:346)
>> >        at
>> > org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:215)
>> >        at
>> > org.apache.myfaces.view.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:140)
>> >        at
>> > org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:57)
>> >        at
>> > org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:45)
>> >        at
>> > org.apache.myfaces.view.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:143)
>> >        at
>> > org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.buildView(FaceletViewDeclarationLanguage.java:329)
>> >        at
>> > org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:66)
>> >        at
>> > org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
>> >        ... 16 more
>> >
>> > - Component Tree <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
>> > <UIViewRoot id="j_id0" inView="true" locale="en_US"
>> > renderKitId="HTML_BASIC"
>> > rendered="true" transient="false" viewId="/home2.xhtml"/> - State
>> > size:548
>> > bytes
>> > - Scoped Variables <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
>> > Request ParametersNameValue*None*Request AttributesNameValue*None*View
>> > AttributesNameValue*None*Flash AttributesNameValue*None*Application
>> > AttributesNameValue*None*
>> > Feb 19, 2011 9:52:09 AM - Generated by MyFaces - for information on
>> > disabling or modifying this error-page, see Disabling error handling in
>> > MyFaces <http://wiki.apache.org/myfaces/Handling_Server_Errors>
>> >
>> > Thank you in advance
>> >
>> > Younes Ouadi
>> >
>>
>>
>>
>> --
>> Jakob Korherr
>>
>> blog: http://www.jakobk.com
>> twitter: http://twitter.com/jakobkorherr
>> work: http://www.irian.at
>
>



-- 
Jakob Korherr

blog: http://www.jakobk.com
twitter: http://twitter.com/jakobkorherr
work: http://www.irian.at

Re: JSF Template in Classpath

Posted by Younes Ouadi <yo...@gmail.com>.
Hi Jakob,

Many thanks for your prompt feedback.

In fact, I have understood from 'JEE 6 Tutorial' that JSF implementations
are expected to manage templates like CSS and JS resources. Please refer to
the bold parts of below section extracted from the Tutorial page 118:

Web resources are any software artifacts that the web application requires
for proper rendering, including images, script files, *and any user-created
component libraries*. Resources must be collected in a standard location,
which can be one of the following.
■ A resource packaged in the web application root must be in a subdirectory
of a resources directory at the web application root:
resources/resource-identifier.
■ A resource packaged in the web application’s classpath must be in a
subdirectory of the META-INF/resources directory within a web
application: META-INF/resources/resource-identifier.

The JavaServer Faces runtime will look for the resources in the preceding
listed locations, in that order.

Resource identifiers are unique strings that conform to the following
format: [locale-prefix/][library-name/][library-version/]resource-name[/resource-version].
Elements
of the resource identifier in brackets ([]) are optional, indicating that
only a resource-name, which is usually a file name, is a required element.

*Resources can be considered as a library location. Any artifact, such as a
composite component or a template that is stored in the resources directory,
becomes accessible to the other application components, which can use it to
create a resource instance.*

END OF JEE 6 TUTORIAL


>From the above, I was expecting that MyFaces would found my resource
'templateInClasspath.xhtml'.

Anyway, I will use your proposed solution as a workaround for the time
being.

Warm regards.


Younes Ouadi


On Sat, Feb 19, 2011 at 12:12 PM, Jakob Korherr <ja...@gmail.com>wrote:

> Hi Younes,
>
> Unfortunately #resource['...'] does not work that way. You should only
> use it for getting the browser path to HTML resources like css or
> javascript files, e.g.:
>
> <link href="#resource['lib:style.css']" rel="stylesheet" />
>
>
> In your example you need to use Resource.getUrl() in a managed bean,
> so something like that:
>
> <ui:composition template="#{myBean.templatePath}">
>
>
> public String getTemplatePath()
> {
>        FacesContext facesContext = FacesContext.getCurrentInstance();
>
>        Resource resource =
> facesContext.getApplication().getResourceHandler()
>                .createResource("templateInClasspath.xhtml", "mytempl");
>        URL url = resource.getURL();
>
>        return url.toExternalForm();
> }
>
> I hope this helps.
>
> Regards,
> Jakob
>
>
> 2011/2/19 Younes Ouadi <yo...@gmail.com>:
> > Hello deras,
> >
> > I have a hands-on experience with JSF. I have been able to develop a
> first
> > application. And I'm now in the stage of reorganizing it for a better
> > management. I'm trying to move 'templates' to classpath in order to share
> > them in jar for different applications. But I'm stack there. Pages that
> > reference that template are not rendered and MyFaces returns the error
> (see
> > below for full details of the error): java.io.FileNotFoundException:
> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> > Not Found in ExternalContext as a Resource
> >
> > Please help in pointing the missing part in my application.
> >
> > *1) Project:*
> > *1.1) Hierarchy*
> > lab-jsf-rsrcmng
> > *    pom.xml*
> >    src/main/webapp
> > *        home2.xhtml*
> >        WEB-INF
> > *            faces-config.xml*
> > *            web.xml*
> >    src/main/resources/META-INF/resources/mytempl
> > *        templateInClasspath.xhtml*
> > *
> > *
> > *1.2) pom.xml*
> > <project
> > xmlns="http://maven.apache.org/POM/4.0.0"
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> > xsi:schemaLocation="
> > http://maven.apache.org/POM/4.0.0
> > http://maven.apache.org/xsd/maven-4.0.0.xsd
> > "
> >>
> > <modelVersion>4.0.0</modelVersion>
> >
> > <groupId>lab-jsf</groupId>
> > <artifactId>lab-jsf-rsrcmng</artifactId>
> > <packaging>war</packaging>
> > <version>0.0.1-SNAPSHOT</version>
> >
> > <name>LAB::JSF::RESOURCE MANAGEMENT</name>
> > <url>http://maven.apache.org</url>
> >
> > <properties>
> > <servlet.version>2.5</servlet.version>
> > <jsp.version>2.1</jsp.version>
> > <myfaces.version>2.0.3</myfaces.version>
> > </properties>
> >
> > <dependencies>
> > <dependency>
> > <groupId>javax.servlet</groupId>
> > <artifactId>servlet-api</artifactId>
> > <version>${servlet.version}</version>
> > <scope>provided</scope>
> > </dependency>
> > <dependency>
> > <groupId>javax.servlet.jsp</groupId>
> > <artifactId>jsp-api</artifactId>
> > <version>${jsp.version}</version>
> > <scope>provided</scope>
> > </dependency>
> > <dependency>
> > <groupId>org.apache.myfaces.core</groupId>
> > <artifactId>myfaces-api</artifactId>
> > <version>${myfaces.version}</version>
> > </dependency>
> > <dependency>
> > <groupId>org.apache.myfaces.core</groupId>
> > <artifactId>myfaces-impl</artifactId>
> > <version>${myfaces.version}</version>
> > </dependency>
> > <dependency>
> > <groupId>junit</groupId>
> > <artifactId>junit</artifactId>
> > <version>4.8.2</version>
> > <scope>test</scope>
> > </dependency>
> > </dependencies>
> >
> > <build>
> > <plugins>
> > <plugin>
> > <groupId>org.apache.maven.plugins</groupId>
> > <artifactId>maven-compiler-plugin</artifactId>
> > <version>2.0.2</version>
> > <configuration>
> > <source>1.5</source>
> > <target>1.5</target>
> > </configuration>
> > </plugin>
> > </plugins>
> > <finalName>${project.artifactId}</finalName>
> > </build>
> > </project>
> >
> > *1.3) home2.xhtml*
> > <?xml version="1.0" encoding="UTF-8"?>
> >
> > <!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:h="http://java.sun.com/jsf/html"
> > xmlns:ui="http://java.sun.com/jsf/facelets"
> >>
> > <h:body>
> > <ui:composition
> template="#{resource['mytempl:templateInClasspath.xhtml']}">
> > </ui:composition>
> > </h:body>
> > </html>
> >
> >
> >
> > *1.4) faces-config.xml*
> > <?xml version="1.0" encoding="UTF-8"?>
> >
> > <faces-config
> > xmlns="http://java.sun.com/xml/ns/javaee"
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> > xsi:schemaLocation="
> > http://java.sun.com/xml/ns/javaee
> > http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd
> > "
> > version="2.0"
> >>
> > </faces-config>
> >
> >
> > *1.5) web.xml:*
> > <?xml version="1.0" encoding="UTF-8"?>
> >
> > <web-app
> > version="2.5"
> > xmlns="http://java.sun.com/xml/ns/javaee"
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> > xsi:schemaLocation="
> > http://java.sun.com/xml/ns/javaee
> > http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
> > "
> >>
> > <display-name>lab-jsf-rsrcmng</display-name>
> > <session-config>
> > <session-timeout>30</session-timeout>
> > </session-config>
> > <welcome-file-list>
> > <welcome-file>home2.xhtml</welcome-file>
> > </welcome-file-list>
> > <servlet>
> > <servlet-name>Faces Servlet</servlet-name>
> > <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
> > <load-on-startup>1</load-on-startup>
> > </servlet>
> > <servlet-mapping>
> > <servlet-name>Faces Servlet</servlet-name>
> > <url-pattern>/faces/*</url-pattern>
> > <url-pattern>*.xhtml</url-pattern>
> > </servlet-mapping>
> > <context-param>
> > <description>
> > If true, a javascript function will be rendered that is able to restore
> the
> > former vertical scroll on every request. Convenient feature if you have
> > pages
> > with long lists and you do not want the browser page to always jump to
> the
> > top
> > if you trigger a link or button action that stays on the same page.
> > Default is 'false'
> > </description>
> > <param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
> > <param-value>true</param-value>
> > </context-param>
> > <context-param>
> > <param-name>org.apache.myfaces.USE_ENCRYPTION</param-name>
> > <param-value>false</param-value>
> > </context-param>
> > </web-app>
> >
> >
> > *1.6) templateInClasspath.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:c="http://java.sun.com/jsp/jstl/core"
> > xmlns:f="http://java.sun.com/jsf/core"
> > xmlns:h="http://java.sun.com/jsf/html"
> > xmlns:ui="http://java.sun.com/jsf/facelets"
> >>
> > <f:view contentType="text/html">
> > <h:head>
> > <title>LAB::JSF::RSRCMNG</title>
> > <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
> > </h:head>
> > <h:body styleClass="natisoft-body" >
> > <h:panelGrid columns="1">
> > <f:facet name="header">
> > <ui:insert name="header">Header</ui:insert>
> > </f:facet>
> >
> > <f:facet name="footer">
> > <ui:insert name="trailer">Trailer</ui:insert>
> > </f:facet>
> >
> > <h:panelGroup>
> > <ui:insert name="content">Content</ui:insert>
> > </h:panelGroup>
> > </h:panelGrid>
> > </h:body>
> > </f:view>
> > </html>
> >
> > *2) Error details*
> >
> > An Error Occurred:
> > java.io.FileNotFoundException:
> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> > Not Found in ExternalContext as a Resource
> >
> > Caused by:
> > java.io.FileNotFoundException -
> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> > Not Found in ExternalContext as a Resource
> > - Stack Trace <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
> >
> > javax.faces.FacesException: java.io.FileNotFoundException:
> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> > Not Found in ExternalContext as a Resource
> >        at
> org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241)
> >        at
> org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156)
> >        at
> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:258)
> >        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
> >        at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
> >        at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> >        at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
> >        at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
> >        at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> >        at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
> >        at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
> >        at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> >        at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
> >        at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
> >        at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
> >        at
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281)
> >        at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> >        at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> >        at java.lang.Thread.run(Thread.java:619)
> > Caused by: java.io.FileNotFoundException:
> >
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> > Not Found in ExternalContext as a Resource
> >        at
> org.apache.myfaces.view.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:199)
> >        at
> org.apache.myfaces.view.facelets.impl.DefaultFacelet.getRelativePath(DefaultFacelet.java:289)
> >        at
> org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:346)
> >        at
> org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:215)
> >        at
> org.apache.myfaces.view.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:140)
> >        at
> org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:57)
> >        at
> org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:45)
> >        at
> org.apache.myfaces.view.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:143)
> >        at
> org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.buildView(FaceletViewDeclarationLanguage.java:329)
> >        at
> org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:66)
> >        at
> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
> >        ... 16 more
> >
> > - Component Tree <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
> > <UIViewRoot id="j_id0" inView="true" locale="en_US"
> renderKitId="HTML_BASIC"
> > rendered="true" transient="false" viewId="/home2.xhtml"/> - State
> size:548
> > bytes
> > - Scoped Variables <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
> > Request ParametersNameValue*None*Request AttributesNameValue*None*View
> > AttributesNameValue*None*Flash AttributesNameValue*None*Application
> > AttributesNameValue*None*
> > Feb 19, 2011 9:52:09 AM - Generated by MyFaces - for information on
> > disabling or modifying this error-page, see Disabling error handling in
> > MyFaces <http://wiki.apache.org/myfaces/Handling_Server_Errors>
> >
> > Thank you in advance
> >
> > Younes Ouadi
> >
>
>
>
> --
> Jakob Korherr
>
> blog: http://www.jakobk.com
> twitter: http://twitter.com/jakobkorherr
> work: http://www.irian.at
>

Re: JSF Template in Classpath

Posted by Jakob Korherr <ja...@gmail.com>.
Hi Younes,

Unfortunately #resource['...'] does not work that way. You should only
use it for getting the browser path to HTML resources like css or
javascript files, e.g.:

<link href="#resource['lib:style.css']" rel="stylesheet" />


In your example you need to use Resource.getUrl() in a managed bean,
so something like that:

<ui:composition template="#{myBean.templatePath}">


public String getTemplatePath()
{
        FacesContext facesContext = FacesContext.getCurrentInstance();

        Resource resource = facesContext.getApplication().getResourceHandler()
                .createResource("templateInClasspath.xhtml", "mytempl");
        URL url = resource.getURL();

        return url.toExternalForm();
}

I hope this helps.

Regards,
Jakob


2011/2/19 Younes Ouadi <yo...@gmail.com>:
> Hello deras,
>
> I have a hands-on experience with JSF. I have been able to develop a first
> application. And I'm now in the stage of reorganizing it for a better
> management. I'm trying to move 'templates' to classpath in order to share
> them in jar for different applications. But I'm stack there. Pages that
> reference that template are not rendered and MyFaces returns the error (see
> below for full details of the error): java.io.FileNotFoundException:
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> Not Found in ExternalContext as a Resource
>
> Please help in pointing the missing part in my application.
>
> *1) Project:*
> *1.1) Hierarchy*
> lab-jsf-rsrcmng
> *    pom.xml*
>    src/main/webapp
> *        home2.xhtml*
>        WEB-INF
> *            faces-config.xml*
> *            web.xml*
>    src/main/resources/META-INF/resources/mytempl
> *        templateInClasspath.xhtml*
> *
> *
> *1.2) pom.xml*
> <project
> xmlns="http://maven.apache.org/POM/4.0.0"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="
> http://maven.apache.org/POM/4.0.0
> http://maven.apache.org/xsd/maven-4.0.0.xsd
> "
>>
> <modelVersion>4.0.0</modelVersion>
>
> <groupId>lab-jsf</groupId>
> <artifactId>lab-jsf-rsrcmng</artifactId>
> <packaging>war</packaging>
> <version>0.0.1-SNAPSHOT</version>
>
> <name>LAB::JSF::RESOURCE MANAGEMENT</name>
> <url>http://maven.apache.org</url>
>
> <properties>
> <servlet.version>2.5</servlet.version>
> <jsp.version>2.1</jsp.version>
> <myfaces.version>2.0.3</myfaces.version>
> </properties>
>
> <dependencies>
> <dependency>
> <groupId>javax.servlet</groupId>
> <artifactId>servlet-api</artifactId>
> <version>${servlet.version}</version>
> <scope>provided</scope>
> </dependency>
> <dependency>
> <groupId>javax.servlet.jsp</groupId>
> <artifactId>jsp-api</artifactId>
> <version>${jsp.version}</version>
> <scope>provided</scope>
> </dependency>
> <dependency>
> <groupId>org.apache.myfaces.core</groupId>
> <artifactId>myfaces-api</artifactId>
> <version>${myfaces.version}</version>
> </dependency>
> <dependency>
> <groupId>org.apache.myfaces.core</groupId>
> <artifactId>myfaces-impl</artifactId>
> <version>${myfaces.version}</version>
> </dependency>
> <dependency>
> <groupId>junit</groupId>
> <artifactId>junit</artifactId>
> <version>4.8.2</version>
> <scope>test</scope>
> </dependency>
> </dependencies>
>
> <build>
> <plugins>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-compiler-plugin</artifactId>
> <version>2.0.2</version>
> <configuration>
> <source>1.5</source>
> <target>1.5</target>
> </configuration>
> </plugin>
> </plugins>
> <finalName>${project.artifactId}</finalName>
> </build>
> </project>
>
> *1.3) home2.xhtml*
> <?xml version="1.0" encoding="UTF-8"?>
>
> <!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:h="http://java.sun.com/jsf/html"
> xmlns:ui="http://java.sun.com/jsf/facelets"
>>
> <h:body>
> <ui:composition template="#{resource['mytempl:templateInClasspath.xhtml']}">
> </ui:composition>
> </h:body>
> </html>
>
>
>
> *1.4) faces-config.xml*
> <?xml version="1.0" encoding="UTF-8"?>
>
> <faces-config
> xmlns="http://java.sun.com/xml/ns/javaee"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="
> http://java.sun.com/xml/ns/javaee
> http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd
> "
> version="2.0"
>>
> </faces-config>
>
>
> *1.5) web.xml:*
> <?xml version="1.0" encoding="UTF-8"?>
>
> <web-app
> version="2.5"
> xmlns="http://java.sun.com/xml/ns/javaee"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="
> http://java.sun.com/xml/ns/javaee
> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
> "
>>
> <display-name>lab-jsf-rsrcmng</display-name>
> <session-config>
> <session-timeout>30</session-timeout>
> </session-config>
> <welcome-file-list>
> <welcome-file>home2.xhtml</welcome-file>
> </welcome-file-list>
> <servlet>
> <servlet-name>Faces Servlet</servlet-name>
> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
> <load-on-startup>1</load-on-startup>
> </servlet>
> <servlet-mapping>
> <servlet-name>Faces Servlet</servlet-name>
> <url-pattern>/faces/*</url-pattern>
> <url-pattern>*.xhtml</url-pattern>
> </servlet-mapping>
> <context-param>
> <description>
> If true, a javascript function will be rendered that is able to restore the
> former vertical scroll on every request. Convenient feature if you have
> pages
> with long lists and you do not want the browser page to always jump to the
> top
> if you trigger a link or button action that stays on the same page.
> Default is 'false'
> </description>
> <param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
> <param-value>true</param-value>
> </context-param>
> <context-param>
> <param-name>org.apache.myfaces.USE_ENCRYPTION</param-name>
> <param-value>false</param-value>
> </context-param>
> </web-app>
>
>
> *1.6) templateInClasspath.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:c="http://java.sun.com/jsp/jstl/core"
> xmlns:f="http://java.sun.com/jsf/core"
> xmlns:h="http://java.sun.com/jsf/html"
> xmlns:ui="http://java.sun.com/jsf/facelets"
>>
> <f:view contentType="text/html">
> <h:head>
> <title>LAB::JSF::RSRCMNG</title>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
> </h:head>
> <h:body styleClass="natisoft-body" >
> <h:panelGrid columns="1">
> <f:facet name="header">
> <ui:insert name="header">Header</ui:insert>
> </f:facet>
>
> <f:facet name="footer">
> <ui:insert name="trailer">Trailer</ui:insert>
> </f:facet>
>
> <h:panelGroup>
> <ui:insert name="content">Content</ui:insert>
> </h:panelGroup>
> </h:panelGrid>
> </h:body>
> </f:view>
> </html>
>
> *2) Error details*
>
> An Error Occurred:
> java.io.FileNotFoundException:
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> Not Found in ExternalContext as a Resource
>
> Caused by:
> java.io.FileNotFoundException -
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> Not Found in ExternalContext as a Resource
> - Stack Trace <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
>
> javax.faces.FacesException: java.io.FileNotFoundException:
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> Not Found in ExternalContext as a Resource
>        at org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241)
>        at org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156)
>        at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:258)
>        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
>        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
>        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
>        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
>        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
>        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
>        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
>        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
>        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
>        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
>        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281)
>        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>        at java.lang.Thread.run(Thread.java:619)
> Caused by: java.io.FileNotFoundException:
> /lab-jsf-rsrcmng/javax.faces.resource/templateInClasspath.xhtml.xhtml?ln=mytempl
> Not Found in ExternalContext as a Resource
>        at org.apache.myfaces.view.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:199)
>        at org.apache.myfaces.view.facelets.impl.DefaultFacelet.getRelativePath(DefaultFacelet.java:289)
>        at org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:346)
>        at org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:215)
>        at org.apache.myfaces.view.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:140)
>        at org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:57)
>        at org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:45)
>        at org.apache.myfaces.view.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:143)
>        at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.buildView(FaceletViewDeclarationLanguage.java:329)
>        at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:66)
>        at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
>        ... 16 more
>
> - Component Tree <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
> <UIViewRoot id="j_id0" inView="true" locale="en_US" renderKitId="HTML_BASIC"
> rendered="true" transient="false" viewId="/home2.xhtml"/> - State size:548
> bytes
> - Scoped Variables <http://localhost:17080/lab-jsf-rsrcmng/home2.xhtml#>
> Request ParametersNameValue*None*Request AttributesNameValue*None*View
> AttributesNameValue*None*Flash AttributesNameValue*None*Application
> AttributesNameValue*None*
> Feb 19, 2011 9:52:09 AM - Generated by MyFaces - for information on
> disabling or modifying this error-page, see Disabling error handling in
> MyFaces <http://wiki.apache.org/myfaces/Handling_Server_Errors>
>
> Thank you in advance
>
> Younes Ouadi
>



-- 
Jakob Korherr

blog: http://www.jakobk.com
twitter: http://twitter.com/jakobkorherr
work: http://www.irian.at