Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将RichFaces 3.3.3部署到具有MyFaces 2.2、PrimeFaces、OmniFaces等的Tomcat_Tomcat_Jsf 2_Richfaces_Jsf 2.2_Myfaces - Fatal编程技术网

将RichFaces 3.3.3部署到具有MyFaces 2.2、PrimeFaces、OmniFaces等的Tomcat

将RichFaces 3.3.3部署到具有MyFaces 2.2、PrimeFaces、OmniFaces等的Tomcat,tomcat,jsf-2,richfaces,jsf-2.2,myfaces,Tomcat,Jsf 2,Richfaces,Jsf 2.2,Myfaces,我有以下配置(不要被堆栈跟踪吓到:) Tomcat 7.0.53+我们所有的JAR(包括MyFaces 2.2.3/Omnifaces/PrimeFaces/等)都位于web应用程序之外(不在web inf\lib内,而是在另一个路径Tomcat\someName\lib内…并使用common.loader从catalina.properties文件中引用)。此设置可以很好地服务于我们所有的web应用程序,除了一个使用RichFaces 3.3.3的传统Web应用程序外,RichFaces JA

我有以下配置(不要被堆栈跟踪吓到:)

Tomcat 7.0.53+我们所有的JAR(包括MyFaces 2.2.3/Omnifaces/PrimeFaces/等)都位于web应用程序之外(不在web inf\lib内,而是在另一个路径Tomcat\someName\lib内…并使用common.loader从catalina.properties文件中引用)。此设置可以很好地服务于我们所有的web应用程序,除了一个使用RichFaces 3.3.3的传统Web应用程序外,RichFaces JAR位于特定的Web应用程序库文件夹中(当我们使用MyFaces 2.0.11时,它工作得很好),但现在在切换到MyFaces 2.2.3之后,我得到以下异常

java.lang.NoClassDefFoundError:com/sun/facelets/tag/jsf/ComponentHandler 位于java.lang.ClassLoader.defineClass1(本机方法) 位于java.lang.ClassLoader.defineClass(ClassLoader.java:800) 位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)

原因:java.lang.ClassNotFoundException:com.sun.facelets.tag.jsf.ComponentHandler 位于org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) 位于org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) 位于org.apache.tomee.catalina.LazyStopWebappClassLoader.loadClass(LazyStopWebappClassLoader.java:143) ... 64多

这似乎是因为facelets包在2.0和2.2之间发生了变化

因此,我尝试将jsf-facelets-1.1.14.jar放到那个webapp lib文件夹中,得到了以下异常

javax.faces.FacesException:无法实例化TagLibrary 位于org.apache.myfaces.view.facelets.compiler.TagLibraryConfig.create(TagLibraryConfig.java:424) 位于org.apache.myfaces.view.facelets.compiler.FaceletsCompilerSupport.loadLibraries(FaceletsCompilerSupport.java:157) 位于org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.loadLibraries(FaceletViewDeclarationLanguage.java:2520)

位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 运行(Thread.java:745) 原因:java.lang.Exception:com.sun.facelets.tag.jsf.core.corebrary必须是org.apache.myfaces.view.facelets.tag.TagLibrary的实例 位于org.apache.myfaces.view.facelets.compiler.TagLibraryConfig.createClass(TagLibraryConfig.java:542) 位于org.apache.myfaces.view.facelets.compiler.TagLibraryConfig.create(TagLibraryConfig.java:419) ... 50多

所以现在我试着把myfaces-impl-2.0.11和myfaces-api-2.0.11放到那个webapp-lib文件夹中,但是现在这个webapp-insn甚至没有被Tomcat部署,并且抛出了关于OmniFaces的异常(这个webapp甚至没有使用,也没有在任何地方提到)

[2014-08-28 09:36:12645 IDT]E 000001b4(org.apache.myfaces.webapp.AbstractFacessinitializer#initFaces)初始化myfaces时出错:类org.omnifaces.application.OmniApplicationFactory不是 javax.faces.application.ApplicationFactory java.lang.IllegalArgumentException:Class org.omnifaces.application.OmniApplicationFactory不是javax.faces.application.ApplicationFactory 位于javax.faces.FactoryFinder.newFactoryInstance(FactoryFinder.java:320) 在javax.faces.FactoryFinder.\u getFactory(FactoryFinder.java:286) 位于javax.faces.FactoryFinder.getFactory(FactoryFinder.java:191) 位于org.apache.myfaces.config.FacesConfigurator.configureApplication(FacesConfigurator.java:500) 位于org.apache.myfaces.config.FacesConfigurator.configure(FacesConfigurator.java:411) 位于org.apache.myfaces.webapp.AbstractFacessinitializer.buildConfiguration(AbstractFacessinitializer.java:337) 位于org.apache.myfaces.webapp.Jsp21FacesInitializer.initcontainerinintegration(Jsp21FacesInitializer.java:73) 位于org.apache.myfaces.webapp.AbstractFacesInitializer.initFaces(AbstractFacesInitializer.java:140) 位于org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(StartupServletContextListener.java:111) 位于org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973) 位于org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467) 位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 位于org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 位于org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 位于org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632) 位于org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1073) 位于org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857) 位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 在java.util.concurrent.FutureTask.run(FutureTask.java:262)处 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 运行(Thread.java:745)

我认为可以混合使用两个不同的JSF版本(但我可能错了),也许有更好的解决方案可以让RichFaces3.3与JSF2.2.3配合使用


有什么想法吗?

RichFaces3.x与JSF2.2不兼容。Tomcat不支持独立的JSF类加载,例如JBoss with
org.JBoss.jbossfaces.WAR\u BUNDLES\u JSF\u IMPL
web.xml
中的上下文参数,GlassFish with
in
中的GlassFish等。因此,即使您通过webapp提供另一个JSF版本,Tomcat也会继续加载自己的JSF版本。这就是行不通。