这是我第一次使用omnifaces。 没有它我的应用程序运行良好,但当我尝试它时,我得到以下异常。
java.lang.NullPointerException
at org.omnifaces.cdi.eager.EagerBeansPhaseListener.afterPhase(EagerBeansPhaseListener.java:50)
at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:189)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:107)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:123)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
at com.sun.grizzly.arp.DefaultAsyncExecutor.execute(DefaultAsyncExecutor.java:159)
at com.sun.grizzly.arp.DefaultAsyncExecutor.interrupt(DefaultAsyncExecutor.java:145)
at com.sun.grizzly.arp.AsyncProcessorTask.doTask(AsyncProcessorTask.java:102)
at com.sun.grizzly.http.TaskBase.run(TaskBase.java:193)
at com.sun.grizzly.http.TaskBase.execute(TaskBase.java:175)
at com.sun.grizzly.arp.DefaultAsyncHandler.handle(DefaultAsyncHandler.java:145)
at com.sun.grizzly.arp.AsyncProtocolFilter.execute(AsyncProtocolFilter.java:210)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:745)
我在Netbeans中创建了一个新的空Web应用程序,在Glassfish 3.1.2.2下运行它 使用: OmniFaces 2.1版 Mojarra 2.2.12 PrimeFaces 5.3 PrimeFaces扩展3.2。 每次我在玻璃鱼启动期间运行应用程序时都会收到相同的错误:
@Eager不可用。无法从CDI bean管理器获取EagerBeansRepository。
请帮忙吗?
当我从glassfish domain1 / lib目录中删除omnifaces-2.1.jar时,一切正常。
答案 0 :(得分:3)
当我从glassfish domain1 / lib目录中删除omnifaces-2.1.jar时,一切正常。
Web库不属于那里。 Web库属于WAR的/WEB-INF/lib
。如果错误放在/WEB-INF/lib
之外,那么webapp将无法在Web库中找到JSF / CDI带注释的类,并抛出与此相关的异常。
将domain1/lib
的OmniFaces JAR文件放回/WEB-INF/lib
。然后,JSF将能够找到OmniFaces中捆绑的@FacesComponent
注释类,CDI将能够找到OmniFaces中捆绑的@XxxScoped
类,例如EagerBeansRepository
类。
另见OmniFaces homepage的“安装”部分:
安装
这是在
/WEB-INF/lib
中删除OmniFaces 2.1 JAR文件的问题。...
OmniFaces被设计为WAR库(Web片段库),因此不能放在WAR自己的
/WEB-INF/lib
之外的webapp运行时类路径的其他位置,例如EAR的/lib
甚至服务器或JRE的拥有/lib
。当OmniFaces JAR文件以这种方式放错位置时,webapp将无法找到OmniFaces捆绑的JSF / CDI注释类,并在部署或运行时期间抛出与此相关的异常。要解决这个问题,请将OmniFaces放回WAR/WEB-INF/lib
。