对于没有 Maven 的 RichFaces4,这似乎不是一项简单的任务,我下载了 myfaces-2.0.9 jar 和 richfaces 4.0.0,并添加了 sac-1.3.jar、guava-r08.jar 和 cssparser-0.9.5.jar .
我工作的环境是 Tomcat 6.0,但是当我运行 tomcat 时,我无法设置一个简单的基于 richfaces4 的 Web 应用程序,我遇到了不同的问题。我添加了一些与以下错误相关的 jar,但我收到另一个转换器的另一个重复 key 错误,
另一方面:我还必须从 tomcat 中删除 tomohawk,因为我正在使用 myfaces。请帮忙。
java.lang.IllegalArgumentException: duplicate key: class javax.faces.convert.DoubleConverter
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:115)
at com.google.common.collect.RegularImmutableMap.<init>(RegularImmutableMap.java:72)
at com.google.common.collect.ImmutableMap$Builder.fromEntryList(ImmutableMap.java:221)
at com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:207)
at org.richfaces.javascript.ClientServiceConfigParser.parseConfig(ClientServiceConfigParser.java:54)
at org.richfaces.application.ValidatorModule.createClientScriptService(ValidatorModule.java:68)
at org.richfaces.application.ValidatorModule.configure(ValidatorModule.java:62)
at org.richfaces.application.ServicesFactoryImpl.init(ServicesFactoryImpl.java:28)
at org.richfaces.application.InitializationListener.createFactory(InitializationListener.java:136)
at org.richfaces.application.InitializationListener.onStart(InitializationListener.java:110)
at org.richfaces.application.InitializationListener.processEvent(InitializationListener.java:152)
at javax.faces.event.SystemEvent.processListener(SystemEvent.java:43)
at org.apache.myfaces.application.ApplicationImpl._traverseListenerList(ApplicationImpl.java:2144)
at org.apache.myfaces.application.ApplicationImpl.access$000(ApplicationImpl.java:118)
at org.apache.myfaces.application.ApplicationImpl$SystemListenerEntry.publish(ApplicationImpl.java:2334)
at org.apache.myfaces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:554)
at org.apache.myfaces.webapp.AbstractFacesInitializer._dispatchApplicationEvent(AbstractFacesInitializer.java:254)
at org.apache.myfaces.webapp.AbstractFacesInitializer.initFaces(AbstractFacesInitializer.java:139)
at org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(StartupServletContextListener.java:111)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4172)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4671)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:701)
at org.apache.catalina.startup.Catalina.start(Catalina.java:585)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Oct 6, 2011 7:13:29 PM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
Oct 6, 2011 7:13:29 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/testRichFaces4] startup failed due to previous errors
Oct 6, 2011 7:13:29 PM org.apache.catalina.core.StandardContext listenerStop
SEVERE: Exception sending context destroyed event to listener instance of class org.apache.myfaces.webapp.StartupServletContextListener
java.lang.NullPointerException
at org.richfaces.application.CacheProvider.release(CacheProvider.java:86)
at org.richfaces.application.ServicesFactoryImpl.release(ServicesFactoryImpl.java:19)
at org.richfaces.application.ServiceTracker.release(ServiceTracker.java:100)
at org.richfaces.application.InitializationListener.onStop(InitializationListener.java:144)
at org.richfaces.application.InitializationListener.processEvent(InitializationListener.java:154)
at javax.faces.event.SystemEvent.processListener(SystemEvent.java:43)
at org.apache.myfaces.application.ApplicationImpl._traverseListenerList(ApplicationImpl.java:2144)
at org.apache.myfaces.application.ApplicationImpl.access$000(ApplicationImpl.java:118)
at org.apache.myfaces.application.ApplicationImpl$SystemListenerEntry.publish(ApplicationImpl.java:2334)
at org.apache.myfaces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:554)
at org.apache.myfaces.webapp.AbstractFacesInitializer._dispatchApplicationEvent(AbstractFacesInitializer.java:254)
at org.apache.myfaces.webapp.AbstractFacesInitializer.destroyFaces(AbstractFacesInitializer.java:285)
at org.apache.myfaces.webapp.StartupServletContextListener.contextDestroyed(StartupServletContextListener.java:153)
at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4211)
at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4846)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4716)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:701)
at org.apache.catalina.startup.Catalina.start(Catalina.java:585)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Oct 6, 2011 7:13:29 PM com.sun.faces.config.ConfigureListener contextDestroyed
SEVERE: Unexpected exception when attempting to tear down the Mojarra runtime
java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.application.ApplicationFactory
at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:804)
at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:306)
at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:108)
at com.sun.faces.config.ConfigureListener.contextDestroyed(ConfigureListener.java:327)
at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4211)
at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4846)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4716)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:701)
at org.apache.catalina.startup.Catalina.start(Catalina.java:585)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
最佳答案
如果您还在类路径中包含 RichFaces 源代码 JAR 文件,就会发生这种情况。它们不属于 webapp 的运行时类路径。它是文件名以 -source.jar
结尾的文件。您应该从 /WEB-INF/lib
中删除它们,并在必要时将它们放在其他不会出现在 webapp 的运行时类路径中的地方。
罪魁祸首是 csv.xml
文件,它位于 richfaces-components-ui-4.0.0 的
和 /META-INF
文件夹中。 Final.jarrichfaces-components-ui-4.0.0.Final-source.jar
文件。该文件定义了标准转换器和验证器。但是,因为该文件现在在类路径中出现了两次,它被读取了两次,导致了这个重复键异常。
与具体问题无关,因为您使用的是 MyFaces 而删除 Tomahawk 是没有争议的。 MyFaces JSF 实现不包含与 Tomahawk 相同的组件。它只是另一个 JSF 实现,技术上是 Mojarra 的竞争对手。 Tomahawk 是一个独立的组件库,它在标准 JSF 实现之上提供更多增强组件,并且可以在每个 JSF 实现之上使用。
关于jsf-2 - RichFaces4 启动失败,出现 java.lang.IllegalArgumentException : duplicate key: class javax. faces.convert.DoubleConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7681582/