java.lang.RuntimeException Cannot find FacesContext

六眼飞鱼酱① 提交于 2019-11-26 07:49:45

问题


I don\'t know how to continue, but I always get the \"java.lang.RuntimeException: Cannot find FacesContext\" for my new JSF 1.2 web application. I\'m sure it\'s just some configuration I can\'t find.

The exception occurs with the first f: or h: tag. Already with the important <f:view> at the beginning.

My index.jsp

<%@ taglib uri=\"http://java.sun.com/jsf/html\" prefix=\"h\"%>
<%@ taglib uri=\"http://java.sun.com/jsf/core\" prefix=\"f\"%>
<%@page contentType=\"text/html\" pageEncoding=\"UTF-8\"%>

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<f:view>
<html>
    <head>
        <title>MyWebsite</title>
        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
        <meta http-equiv=\"pragma\" content=\"no-cache\">
        <meta http-equiv=\"cache-control\" content=\"no-cache\">
        <meta http-equiv=\"expires\" content=\"0\">
    </head>
    <body>
        <div>MyContent</div>
    </body>
</html>
</f:view>

My web.xml looks like this:

<?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\">
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.jsp</param-value>
    </context-param>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>720</session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

And then I also have a faces-config.xml that should reference myBean I want to use afterward in the body of the page:

<?xml version=\'1.0\' encoding=\'UTF-8\'?>
<faces-config version=\"1.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_1_2.xsd\">
    <application>
        <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
    </application>

    <managed-bean>
        <managed-bean-name>myClassName</managed-bean-name>
        <managed-bean-class>
            com.company.className
        </managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
</faces-config>

What am I missing here?


回答1:


java.lang.RuntimeException: Cannot find FacesContext

Thus, the JSF <f:xxx> and <h:xxx> tags are complaining that FacesContext cannot be found. The FacesServlet is the one responsible for creating the faces context. The faces servlet is invoked when the request URL matches its URL pattern, which is in your particular case *.jsf. So, when you open the index.jsp as http://localhost:8080/context/index.jsp, or are relying on the <welcome-file> setting, then you are not invoking the faces servlet and you would indeed get this exception.

You need to open the index.jsp as http://localhost:8080/context/index.jsf, or to set the welcome file entry to index.jsf in order to properly invoke the faces servlet, so that it can create the faces context which is required by the JSF components declared in the JSP page.

Note however that only fixing the welcome file isn't sufficient in this JSF 1.x + Tomcat environment. You also need to supply a physically existing, but completely empty index.jsf file next to the index.jsp file in the webcontent in order to fool Tomcat that index.jsf really exists as welcome file. It would otherwise show a 404 error because it checks the physical presence of the welcome file beforehand.

See also:

  • javax.faces.FacesException: java.lang.RuntimeException: Cannot find FacesContext

Unrelated to the concrete problem, I'm wondering why you're using JSP if you've apparently installed Facelets 1.x and registered its view handler. Facelets is far superior to JSP.



来源:https://stackoverflow.com/questions/16354200/java-lang-runtimeexception-cannot-find-facescontext

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!