0

It is quite strange when I add faces-config.xml file in WEB-INF in my project it cause me an error "RES_NOT_FOUND" note: I have try <link type="text/css" rel="stylesheet" href="style.css" /> and it's working fine without the faces-config.xml. I also try to move it inside resources folder

I have try to use this code to add a css file for my .xhtml page

<h:head>
  <h:outputStylesheet name="styles.css" />
</h:head>

it will generate the following

<link type="text/css" rel="stylesheet" href="RES_NOT_FOUND">

I am using JSF 2.2 + Google App Engine as I follow the tutorial from this site

http://java.wildstartech.com/Java-Platform-Enterprise-Edition/JavaServer-Faces/javaserver-faces-22/configuring-jsf-22-to-run-on-the-google-app-engine-using-eclipse

the tutorial went good except until I try to import a external files like .css, .js, and image files; and when I access it directly from the link like localhost:8080/style.css the css file will display correctly.

here is my code

the 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>
            My App
        </display-name>
        <description>
            Template JSF 2.2 application configured to run on the Google
            AppEngine for Java.
        </description>
        <!-- ***** Designate client-side state saving. *****  -->
        <context-param>
            <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
            <param-value>client</param-value>
        </context-param>
        <!-- Set the default suffix for JSF pages to .xhtml -->
        <context-param>
            <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
            <param-value>.xhtml</param-value>
        </context-param>
        <!-- Disable use of threading for single-threaded environments such as the Google AppEngine. -->
        <context-param>
            <param-name>com.sun.faces.enableThreading</param-name>
            <param-value>false</param-value>
            <!--        <description>
                When enabled, the runtime initialization and default ResourceHandler 
                implementation will use threads to perform their functions. Set this 
                value to false if threads aren't desired (as in the case of running 
                within the Google Application Engine).

                Note that when this option is disabled, the ResourceHandler will not 
                pick up new versions of resources when ProjectStage is development.
            </description>-->
        </context-param>
        <!-- ***** Specify JBoss Expression Language Over Default -->
        <context-param>
            <param-name>com.sun.faces.expressionFactory</param-name>
            <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
        </context-param>
        <!-- ***** Load the JavaServer Faces Servlet ***** -->
        <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>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
        <welcome-file-list>
            <welcome-file>faces/index.xhtml</welcome-file>
        </welcome-file-list>
        <context-param>
            <param-name>primefaces.UPLOADER</param-name>
            <param-value>commons</param-value>
        </context-param>
        <context-param>
            <param-name>javax.faces.CONFIG_FILES</param-name>
            <param-value>/WEB-INF/faces-config1.xml</param-value>
        </context-param>
        <filter>
            <filter-name>PrimeFaces FileUpload Filter</filter-name>
            <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
            <init-param>
                <param-name>thresholdSize</param-name>
                <param-value>2147483647</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>PrimeFaces FileUpload Filter</filter-name>
            <servlet-name>Faces Servlet</servlet-name>
        </filter-mapping>
        <context-param>
            <param-name>javax.faces.PROJECT_STAGE</param-name>
            <param-value>Development</param-value>
        </context-param>
    </web-app>

the index.xhtml

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <f:facet name="first">
            <meta content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
            <title>There is Hope!</title>
        </f:facet>
        <h:outputStylesheet name="style.css" />
    </h:head>
    <h:body>
        <h:graphicImage url="logo.png"/>//this line works!
        <br />
        Hello from Facelets
        <br />
        <h:link outcome="welcomePrimefaces"  value="Primefaces welcome page" />
    </h:body>
</html>

the appengine-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"
                   xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
                   xsi:schemaLocation='http://kenai.com/projects/nbappengine/downloads/download/schema/appengine-web.xsd appengine-web.xsd'>
    <application>RetailSmarts</application>
    <version>1</version>


    <!--Allows App Engine to send multiple requests to one instance in parallel:-->
    <threadsafe>true</threadsafe>

    <!-- Configure java.util.logging -->
    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>
    <sessions-enabled>true</sessions-enabled>
    <async-session-persistence enabled="true"></async-session-persistence>

</appengine-web-app>

the faces-config.xml(without this my web project works fine but I plan to use it later for these What is the use of faces-config.xml in JSF 2?

<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2" 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_2.xsd">
    <application>
        <lifecycle>
            <phase-listener>package.SessionPhaseListener</phase-listener>
        </lifecycle>
    </application>
</faces-config>

the SessionPhaseListener.java

public class SessionPhaseListener implements PhaseListener, Serializable {

    private static final long serialVersionUID = 1L;

    @Override
    public void afterPhase(PhaseEvent arg0) {
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("CURRENT_TIME", System.currentTimeMillis());
    }

    @Override
    public void beforePhase(PhaseEvent arg0) {
    }

    @Override
    public PhaseId getPhaseId() {
        return PhaseId.ANY_PHASE;
    }
}

the tutorial stated I need to add the PhaseListener to Ensure the Contents of HttpSession Are Saved

Can anyone point which part of my project causes the error. I really want to use faces-config.xml without having a error. My whole point is, I cannot import css, js and other file with faces-config.xml present in my project. Is there any configuration or information I missed for JSF and GAE setup.

Community
  • 1
  • 1
yesterdaysfoe
  • 768
  • 3
  • 7
  • 23
  • *"I also try to move it inside resources folder"* Where exactly is that folder? Does this answer your question as well? http://stackoverflow.com/questions/8367421/how-to-reference-resource-in-facelets-template – BalusC Aug 30 '14 at 07:46
  • Hi BalusC, thank you for your prompt response. I have to try it again to be sure, I don't know but it works like a charm. I put the files inside `resources` folder as what the link state, and the presence of faces-config.xml has nothing to do with it, but when I try to use it for bootstrap files the error is display again. I know the bootstrap thing is not part of the question that I posted, I just generalized the error(maybe I just panicked). For now, I need to review again my code. thank you again! btw, I'm an avid fan of yours. – yesterdaysfoe Aug 30 '14 at 08:35
  • I figure out where I went wrong, I just have to recompile my project. well, auto deploy fails me. – yesterdaysfoe Aug 30 '14 at 08:57

0 Answers0