当我在服务器GlassFish 4.0上发布应用程序时,我遇到以下异常:
Caused by: java.lang.RuntimeException:
com.sun.faces.config.ConfigurationException: Factory 'javax.faces.context.ExceptionHandlerFactory' was not configured properly.
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:273)
at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:5362)
at com.sun.enterprise.web.WebModule.contextListenerStart(WebModule.java:743)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:5898)
... 44 more Caused by: com.sun.faces.config.ConfigurationException:
Factory 'javax.faces.context.ExceptionHandlerFactory' was not configured properly.
at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:330)
at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:236)
at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:435)
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:214)
... 47 more Caused by: javax.faces.FacesException:
org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory
at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:710)
at javax.faces.FactoryFinder.getImplementationInstance(FactoryFinder.java:572)
at javax.faces.FactoryFinder.access$500(FactoryFinder.java:140)
at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1120)
at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:379)
at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:328)
... 50 more Caused by: java.lang.ClassNotFoundException:
org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1761)
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1611)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:685)
... 55 more
如何修复错误?
答案 0 :(得分:1)
抛出java.lang.ClassNotFoundException: org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory
ClassNotFoundException
表示所提到的类,或者至少包含所提到的类的JAR文件,不存在于当前运行时类路径中。
当部署为WAR文件时,webapp的运行时类路径包括以下路径:
/WEB-INF/classes
- 对于松散的.class
文件(通常,IDE会自动为项目的src
文件夹中的源文件执行此操作。)/WEB-INF/lib
- 对于JAR文件(如果您没有使用Maven等依赖关系管理框架,那么您需要手动删除JAR)。/lib
文件夹 - 用于特定于服务器的库,或者需要在所有Web应用程序中共享的库(文件夹名称取决于所使用的服务器)。/lib
和/lib/ext
个文件夹 - 除非你需要修复JRE / JDK 本身的一些错误,否则永远不要放任何东西 通常,您只选择前两个选项。只在WAR中进行,而不是在其他地方进行。
上述类org.omnifaces
的包名称暗示它是OmniFaces的一部分。您可以在那里下载JAR,并根据其安装说明,将其放入/WEB-INF/lib
。
根据你的评论:
我在src / main / webapp / WEB-INF / lib中添加了几个库 - omnifaces-1.7.jar和primefaces-4.0.jar后问题解决了。 虽然这些库在classpath中。不确定这个决定是否最佳。
很抱歉,但是你所说的并不是真的。例外清楚地表明它们在类路径中不。 ClassNotFoundException
。就那么简单。至少不在任何上述路径中的webapp的运行时类路径中。很可能您错误地为webapp的运行时类路径假定了%CLASSPATH%
环境变量或项目的 Build Path 属性。