2012-11-22 34 views
0

我正在开发一个maven JSF web应用程序。 我想在一些@ViewScoped豆使用@PreDestroy,然而这是不可能的JSF 2.0(或没有时,页面被关闭或转移) 我发现的MyFaces CODI的@ViewAccessScoped可能是解决方案,但是我有添加它的问题。 当我尝试这个:MyFaces CODI - 添加到项目

<dependency> 
    <groupId>org.apache.myfaces.extensions.cdi.bundles</groupId> 
    <artifactId>myfaces-extcdi-bundle-jsf20</artifactId> 
    <version>1.0.5</version> 
</dependency> 

它编译时会导致一个错误。

没有依赖项目运行良好。由于我使用的是使用MyFaces的乐团范围为春季新领域的背景下的巴西框架使用Spring与JSF,I'm

com.sun.faces.config.ConfigurationException: Factory 'javax.faces.context.FacesContextFactory' was not configured properly. 
    at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:329) 
    at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:235) 
    at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:376) 
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:227) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4779) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:649) 
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:530) 
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1471) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) 
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:791) 
    at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1436) 
    at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:856) 
    at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:353) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: javax.faces.FacesException: org.apache.myfaces.extensions.cdi.jsf2.impl.listener.request.CodiFacesContextFactory 
    at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:712) 
    at javax.faces.FactoryFinder.getImplementationInstance(FactoryFinder.java:574) 
    at javax.faces.FactoryFinder.access$500(FactoryFinder.java:140) 
    at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1122) 
    at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:381) 
    at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:327) 
    ... 46 more 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:692) 
    ... 51 more 
Caused by: java.lang.NoClassDefFoundError: javax/enterprise/context/spi/Contextual 
    at org.apache.myfaces.extensions.cdi.core.impl.util.ClassDeactivation.getClassDeactivator(ClassDeactivation.java:69) 
    at org.apache.myfaces.extensions.cdi.core.impl.util.ClassDeactivation.isClassActivated(ClassDeactivation.java:50) 
    at org.apache.myfaces.extensions.cdi.jsf2.impl.listener.request.CodiFacesContextFactory.isActivated(CodiFacesContextFactory.java:138) 
    at org.apache.myfaces.extensions.cdi.jsf2.impl.listener.request.CodiFacesContextFactory.<init>(CodiFacesContextFactory.java:46) 
    ... 56 more 
Caused by: java.lang.ClassNotFoundException: javax.enterprise.context.spi.Contextual 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556) 
    ... 60 more 
+2

CODI是一个CDI扩展名,所以它首先需要CDI。这个例外也说明了这一点。类路径中缺少一类CDI。 CDI通常已经在Java EE应用程序服务器中提供。但是,您的堆栈跟踪提示您使用的是Tomcat,它是一个不附带CDI的准系统JSP/Servlet容器(更不用说JSF本身)。为了解决这个问题,你需要将CDI添加到Tomcat中(因为我不是Maven的人,我不知道该怎么做,因此我在这里没有回答)。另一种方法是升级到像TomEE或Glassfish这样的真正的Java EE应用服务器。 – BalusC

+0

您可以使用该原型来查看配置CDI实施所需的内容。请参阅http://myfaces.apache.org/并在页面上搜索'archetype'或查看CODI附带的一个小示例或https://cwiki.apache.org/confluence/display/EXTCDI中列出的一个小示例/外部。 –

+0

谢谢您的回复,但是我无法解决问题,我仍然有错误,从来没有想过:-( – Tomas

回答

0

我围住错误日志

  • “SameViewed” - >就像@ViewScope(JSF)
  • “AccessScoped” - >正如ViewAccessScoped

这是一个非常好的图书馆,我没有更多的问题 与我的项目范围。

对不起,是葡萄牙人,但我可以翻译或帮助你开始,如果有所示的托付... 链接葡萄牙教程:

http://lindbergframework.blogspot.com/2012/02/como-manter-o-estado-de-um-managedbean.html

希望这有助于! :)

+0

MyFaces Orchestra是一个像CODI一样适用于CDI的Spring附加组件,如果您的Spring有问题如果你没有将CDI添加到你的应用程序中,CODI将无法正常工作,这应该不是什么大惊喜......并且搜索javax.enterprise.context.spi.Contextual的位置来自不应该那么困难;)我们在许多大项目中使用CODI已有2年,没有任何问题。 –