java.lang.RuntimeException找不到FacesContext

我不知道如何继续,但我总是得到新的JSF 1.2 Web应用程序的“java.lang.RuntimeException:无法findFacesContext”。 我确定这只是一些我找不到的configuration。

第一个f:h:标签发生exception。 在开始的时候已经有了重要的<f:view>

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

我的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"> <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> 

然后,我也有一个faces-config.xml ,应该引用myBean我想在页面的主体中使用:

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

我在这里错过了什么?

java.lang.RuntimeException: Cannot find FacesContext

因此,JSF <f:xxx><h:xxx>标签抱怨FacesContext找不到。 FacesServlet是负责创build面上下文的人。 当请求的URL匹配它的URL模式时,会调用faces servlet,在你的特定情况*.jsf 。 所以,当你打开index.jsphttp://localhost:8080/context/index.jsp ,或者依靠<welcome-file>设置,那么你不会调用faces servlet,你确实会得到这个例外。

您需要以http://localhost:8080/context/index.jsf打开http://localhost:8080/context/index.jsf ,或者将欢迎文件条目设置为index.jsf以正确调用faces servlet,以便可以创build面在JSP页面中声明的JSF组件需要的上下文。

但是请注意,在这个JSF 1.x + Tomcat环境中,只修复welcome文件是不够的。 您还需要在webcontent的index.jsf文件旁边提供一个物理上存在的但完全空的index.jsf文件,以便愚弄Tomcat,该index.jsf确实作为欢迎文件存在。 否则会显示404错误,因为它会事先检查欢迎文件的实际存在。

也可以看看:

  • javax.faces.FacesException:java.lang.RuntimeException:找不到FacesContext

具体问题无关 ,我想知道为什么你使用JSP,如果你明显安装了Facelets 1.x并注册了它的视图处理程序。 Facelets远远优于 JSP。