2013-05-04 27 views
3

我正在使用Spring Webflow和JSF進行項目工作。我正在嘗試完成類似於Spring Webflow https://github.com/SpringSource/spring-webflow-samples/tree/master/booking-faces的預訂面部示例。嘗試執行Web流時遇到以下錯誤。使用JSF ClassNotFoundException問題的Spring Web Flow問題

org/apache/myfaces/renderkit/StateCacheUtils 

viewId=/WEB-INF/flows/main/enterSearchCriteria.xhtml 
location=C:\Users\workspace4\.metadata\.plugins\org.eclipse.wst.server.core \tmp1\wtpwebapps\myWebApp\WEB-INF\flows\main\enterSearchCriteria.xhtml 
phaseId=RENDER_RESPONSE(6) 

Caused by: 
java.lang.ClassNotFoundException - org.apache.myfaces.renderkit.StateCacheUtils 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678) 

完整的堆棧跟蹤是:

java.lang.NoClassDefFoundError: org/apache/myfaces/renderkit/StateCacheUtils 
    at org.springframework.faces.webflow.MyFacesFlowResponseStateManager.getWrappedMyfacesResponseStateManager(MyFacesFlowResponseStateManager.java:66) 
    at org.springframework.faces.webflow.MyFacesFlowResponseStateManager.isWriteStateAfterRenderViewRequired(MyFacesFlowResponseStateManager.java:70) 
    at org.apache.myfaces.application.ViewHandlerImpl.setWritingState(ViewHandlerImpl.java:371) 
    at org.apache.myfaces.application.ViewHandlerImpl.writeState(ViewHandlerImpl.java:315) 
    at javax.faces.application.ViewHandlerWrapper.writeState(ViewHandlerWrapper.java:65) 
    at org.apache.myfaces.shared.renderkit.html.HtmlFormRendererBase.encodeEnd(HtmlFormRendererBase.java:220) 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:665) 
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:63) 
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:47) 
    at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:202) 
    at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:119) 
    at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:56) 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:665) 
    at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:545) 
    at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:541) 
    at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:541) 
    at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1981) 
    at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:285) 
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59) 
    at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:116) 
    at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:241) 
    at org.springframework.faces.support.LifecycleWrapper.render(LifecycleWrapper.java:54) 
    at org.springframework.faces.webflow.JsfView.render(JsfView.java:87) 
    at org.springframework.webflow.engine.ViewState.render(ViewState.java:293) 
    at org.springframework.webflow.engine.ViewState.refresh(ViewState.java:242) 
    at org.springframework.webflow.engine.ViewState.resume(ViewState.java:220) 
    at org.springframework.webflow.engine.Flow.resume(Flow.java:537) 
    at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:259) 
    at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:169) 
    at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:227) 
    at org.springframework.faces.webflow.JsfFlowHandlerAdapter.handle(JsfFlowHandlerAdapter.java:46) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:920) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:816) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:801) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    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:224) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: java.lang.ClassNotFoundException: org.apache.myfaces.renderkit.StateCacheUtils 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523) 
    ... 86 more 

我從計算器後檢查了答案:java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener。但是我使用的是Maven,沒有/ WEB-INF/lib目錄。我通過Maven依賴關係在我的類路徑上擁有JSF依賴項。不知道,發生了什麼事。謝謝

回答

2

MyFaces在2.1.10版本中重新打包了StateCacheUtils。所以spring-webflow將不能與myfaces 2.1.10或更高版本一起使用。

我爲此創建了一個issue in jira。也許它會在更高版本中修復。

同時還有一個非常非常非常對於這個問題的解決方法:

在自己的項目中創建一個類org.apache.myfaces.rederkit.StateCacheUtils,讓它在新的位置unsing繼承以下代碼:

package org.apache.myfaces.renderkit; 

public class StateCacheUtils extends org.apache.myfaces.application.viewstate.StateCacheUtils { 

} 
+0

那爲我工作 – Stevanicus 2014-06-30 10:29:39

0

它看起來像StateCacheUtils已經轉移到一個新的包,截至去年(2012年),現在生活在org.apache.myfaces.application.viewstate。它看起來像Spring Webflow和MyFaces之間的依賴性問題。你可能想在Spring Weblflow論壇上提出這個問題。