Jakarta ee SpringWebFlow:java.lang.ClassNotFoundException:com.sun.faces.component.CompositeComponentStackManager

Jakarta ee SpringWebFlow:java.lang.ClassNotFoundException:com.sun.faces.component.CompositeComponentStackManager,jakarta-ee,spring-webflow,Jakarta Ee,Spring Webflow,我正在尝试实现一个非常简单的webflow。 但是,每当我切换视图状态时,总是会出现此错误。 因此,我可以看到第一个视图状态,但无法访问任何其他视图。 有人知道我在这里遗漏了什么吗 SEVERE: Servlet.service() for servlet [authentication] in context with path [/test] threw exception [Handler processing failed; nested exception is java.lang.N

我正在尝试实现一个非常简单的webflow。 但是,每当我切换视图状态时,总是会出现此错误。 因此,我可以看到第一个视图状态,但无法访问任何其他视图。 有人知道我在这里遗漏了什么吗

SEVERE: Servlet.service() for servlet [authentication] in context with path [/test] threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: com/sun/faces/component/CompositeComponentStackManager] with root cause
java.lang.ClassNotFoundException: com.sun.faces.component.CompositeComponentStackManager
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
    at org.apache.tomee.catalina.LazyStopWebappClassLoader.loadClass(LazyStopWebappClassLoader.java:129)
    at org.springframework.faces.webflow.JsfViewFactory.processTree(JsfViewFactory.java:165)
    at org.springframework.faces.webflow.JsfViewFactory.getViewStateViewRoot(JsfViewFactory.java:138)
    at org.springframework.faces.webflow.JsfViewFactory.getViewRoot(JsfViewFactory.java:102)
    at org.springframework.faces.webflow.JsfViewFactory.getView(JsfViewFactory.java:86)
    at org.springframework.webflow.engine.ViewState.resume(ViewState.java:192)
    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:228)
    at org.springframework.faces.webflow.JsfFlowHandlerAdapter.handle(JsfFlowHandlerAdapter.java:57)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
但我的设置非常简单: web.xml


认证
org.springframework.web.servlet.DispatcherServlet
认证
*.做
身份验证-flow.xml

<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/webflow
        http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">

        <var name="user" class="de.mato.test.entities.User"/>

        <view-state id="login" view="login.xhtml" model="user">
            <transition on="signup" to="signUp" />
            <transition on="submitLogin" to="finish">
            </transition>
        </view-state>

        <view-state id="signUp" view="signup.xhtml" model="user">
            <transition on="backToLogin" to="welcome" />
            <transition on="submitSignup" to="authentication">
            </transition>
        </view-state>

        <action-state id="authenticate">
        </action-state>

        <end-state id="finish" view="externalRedirect:account" />
</flow>

authentication-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:webflow="http://www.springframework.org/schema/webflow-config"
           xmlns:faces="http://www.springframework.org/schema/faces"
           xsi:schemaLocation="
                        http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/webflow-config
                        http://www.springframework.org/schema/webflow-config/spring-webflow-config.xsd
                        http://www.springframework.org/schema/faces
                        http://www.springframework.org/schema/faces/spring-faces.xsd">


        <webflow:flow-executor id="flowExecutor" />                    

        <webflow:flow-registry id="flowRegistry" flow-builder-services="facesFlowBuilderServices" base-path="/WEB-INF/flows">
                <webflow:flow-location-pattern value="/**/*-flow.xml" />
        </webflow:flow-registry>
        <faces:flow-builder-services id="facesFlowBuilderServices" development="true" />

        <faces:resources />

        <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
                <property name="order" value="1"/>
                <property name="flowRegistry" ref="flowRegistry" />
                <property name="defaultHandler">
                        <bean class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />
                </property>
        </bean>

        <bean class="org.springframework.faces.webflow.JsfFlowHandlerAdapter">
                <property name="flowExecutor" ref="flowExecutor" />
        </bean>

</beans>

这些页面非常简单,因为它们只定义了一些用于视图状态切换的按钮

多谢各位

我找到了一个解决方案: 事实证明,我需要将com.sun依赖项添加到我的项目中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:webflow="http://www.springframework.org/schema/webflow-config"
           xmlns:faces="http://www.springframework.org/schema/faces"
           xsi:schemaLocation="
                        http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/webflow-config
                        http://www.springframework.org/schema/webflow-config/spring-webflow-config.xsd
                        http://www.springframework.org/schema/faces
                        http://www.springframework.org/schema/faces/spring-faces.xsd">


        <webflow:flow-executor id="flowExecutor" />                    

        <webflow:flow-registry id="flowRegistry" flow-builder-services="facesFlowBuilderServices" base-path="/WEB-INF/flows">
                <webflow:flow-location-pattern value="/**/*-flow.xml" />
        </webflow:flow-registry>
        <faces:flow-builder-services id="facesFlowBuilderServices" development="true" />

        <faces:resources />

        <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
                <property name="order" value="1"/>
                <property name="flowRegistry" ref="flowRegistry" />
                <property name="defaultHandler">
                        <bean class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />
                </property>
        </bean>

        <bean class="org.springframework.faces.webflow.JsfFlowHandlerAdapter">
                <property name="flowExecutor" ref="flowExecutor" />
        </bean>

</beans>