错误找不到工厂:javax.faces.context.FacesContextFactory
Posted
技术标签:
【中文标题】错误找不到工厂:javax.faces.context.FacesContextFactory【英文标题】:Error Could not find Factory: javax.faces.context.FacesContextFactory 【发布时间】:2012-03-05 14:49:07 【问题描述】:我正在尝试使用 Eclipse 运行示例 primefaces 3.1 应用程序。当我运行时,我得到以下异常。我已将 jstl-1.0.2.jar,jsf-impl-2.0.3.jar,jsf-api-2.0.3.jar,primefaces-3.1.jar 放在 WEb-INF/lib 文件夹下,index.jsf 放在/Web 内容。
Problem accessing /TestPrime/index.jsf. Reason:
java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.context.FacesContextFactory
Caused by:
javax.servlet.UnavailableException: java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.context.FacesContextFactory
at org.mortbay.jetty.servlet.ServletHolder.makeUnavailable(ServletHolder.java:415)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:458)
at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:263)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:224)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.eclipse.wst.server.preview.internal.PreviewStarter.run(PreviewStarter.java:72)
at org.eclipse.wst.server.preview.internal.PreviewStarter.main(PreviewStarter.java:29)
我的web.xml如下:
<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" >
<welcome-file-list>
<welcome-file>index.jsp</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>*.jsf</url-pattern>
</servlet-mapping>
</web-app>
更新 1
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<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>
<mime-mapping>
<extension>png</extension>
<mime-type>image/png</mime-type>
</mime-mapping>
<welcome-file-list>
<welcome-file>login.jsf</welcome-file>
</welcome-file-list>
</web-app>
【问题讨论】:
【参考方案1】:这是 Jetty 的错。它以某种方式没有执行在 JSF TLD 文件中注册的 JSF ConfigureListener
。
将以下条目添加到您的 web 应用的 web.xml
以手动注册它:
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
另见:
could not find Factory: javax.faces.context.FacesContextFactory【讨论】:
感谢您的帮助。我在 web.xml 中添加了<listener> <listener-class>com.sun.faces.config.ConfigureListener</listener-class> </listener>
,当我运行时出现错误HTTP ERROR: 404 Problem accessing /TestPrime/faces/login.jsf. Reason: NOT_FOUND -------------------------------------------------------------------------------- Powered by Jetty://
这是一个不同的问题。该资源不在您期望的位置。 URL 错误或资源尚未部署。你最初的问题已经解决了。如果您卡住了,请提出一个新问题。
非常感谢。巴鲁斯 C.我需要弄清楚为什么我会收到 HTTP ERROR: 404 Problem accessing /TestPrime/faces/login.jsf. Reason: NOT_FOUND
错误。以上是关于错误找不到工厂:javax.faces.context.FacesContextFactory的主要内容,如果未能解决你的问题,请参考以下文章
找不到工厂:javax.faces.context.FacesContextFactory
异常找不到工厂:javax.faces.application.ApplicationFactory
检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 800*****。
java.lang.IllegalStateException:找不到工厂 javax.faces.context.FacesContextFactory 的备份