Java JSF2.1Spring会话范围

Java JSF2.1Spring会话范围,java,spring,jsf,jakarta-ee,jsf-2,Java,Spring,Jsf,Jakarta Ee,Jsf 2,我的JSF Spring应用程序中有以下配置: <bean id="userSessionBean" class="com.vanilla.beans.UserSessionBean" scope="session"> <aop:scoped-proxy/> </bean> 现在我有了我的托管bean: @ManagedBean(name=“userBean”) @请求范围 公共类用户bean{ @ManagedProperty(value="#{u

我的JSF Spring应用程序中有以下配置:

<bean id="userSessionBean" class="com.vanilla.beans.UserSessionBean" scope="session">
  <aop:scoped-proxy/>
 </bean> 
现在我有了我的托管bean:

@ManagedBean(name=“userBean”) @请求范围 公共类用户bean{

@ManagedProperty(value="#{userService}")
    UserService userService;

   public Sttring getUserName(){
    return userService.getCurrentUser();
   }
}
然后我有了xhtml

<h:outputText value="#{userBeanBean.userName}" />

我的所有流程都可以正常工作,但当会话到期时,我会出现以下错误并单击“刷新”,我会看到以下堆栈跟踪:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.userSessionBean': Scope 'session' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: Cannot create a session after the response has been committed
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:339)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    at org.springframework.aop.target.SimpleBeanTargetSource.getTarget(SimpleBeanTargetSource.java:33)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.getTarget(Cglib2AopProxy.java:653)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:604)
    at com.vanilla.beans.UserSessionBean$$EnhancerByCGLIB$$fe05fe49.getCurrentMokdanName(<generated>)
    at com.vanilla.bl.UserServiceImpl.getCurrentUser(UserServiceImpl.java:37)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy18.getCurrentMokedUser(Unknown Source)
    at com.ewave.upromotions.beans.MokedBean.getMokedName(MokedBean.java:70)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:83)
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:123)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    ... 43 more
Caused by: java.lang.IllegalStateException: Cannot create a session after the response has been committed
    at org.apache.catalina.connector.Request.doGetSession(Request.java:2400)
    at org.apache.catalina.connector.Request.getSession(Request.java:2120)
    at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:833)
    at org.springframework.web.context.request.ServletRequestAttributes.getSession(ServletRequestAttributes.java:79)
    at org.springframework.web.context.request.ServletRequestAttributes.getSessionMutex(ServletRequestAttributes.java:211)
    at org.springframework.web.context.request.SessionScope.get(SessionScope.java:90)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)
    ... 73 more
<代码>:由Or.SrpFraskWork.BeaS.Fase.BeeCeCureExcExc:创建bean的名称为“SistabdAbjult.UsSerSeBean”:“当前会话中的作用域”不是活动的;如果您打算从单体引用它,请考虑为该bean定义一个作用域代理;嵌套异常是JavaLang.ILLLALSTATEExExc:不能创建e提交响应后的会话 位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:339) 位于org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 位于org.springframework.aop.target.SimpleBanTargetSource.getTarget(SimpleBanTargetSource.java:33) 位于org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.getTarget(Cglib2AopProxy.java:653) 位于org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:604) 在com.vanilla.beans.UserSessionBean$$EnhancerByGlib$$fe05fe49.getCurrentMokdanName()上 位于com.vanilla.bl.UserServiceImpl.getCurrentUser(UserServiceImpl.java:37) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源) 位于java.lang.reflect.Method.invoke(未知源) 位于org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) 位于org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:150)上 位于org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 位于org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:172) 位于org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) 位于org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:172) 位于org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 位于$Proxy18.getCurrentMokedUser(未知来源) 在com.ewave.upromotions.beans.MokedBean.getMokedName(MokedBean.java:70)上 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源) 位于java.lang.reflect.Method.invoke(未知源) 位于javax.el.BeanELResolver.getValue(BeanELResolver.java:83) 在com.sun.faces.el.DemuxCompositeELResolver.\u getValue(DemuxCompositeELResolver.java:176) 在com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)上 位于org.apache.el.parser.AstValue.getValue(AstValue.java:123) 在org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) 位于com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) …还有43个 原因:java.lang.IllegalStateException:提交响应后无法创建会话 位于org.apache.catalina.connector.Request.doGetSession(Request.java:2400) 位于org.apache.catalina.connector.Request.getSession(Request.java:2120) 位于org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:833) 位于org.springframework.web.context.request.ServletRequestAttributes.getSession(ServletRequestAttributes.java:79) 位于org.springframework.web.context.request.ServletRequestAttributes.getSessionMutex(ServletRequestAttributes.java:211) 位于org.springframework.web.context.request.SessionScope.get(SessionScope.java:90) 位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325) …还有73个 我能解决它吗?

请添加以下内容:

  <listener>
    <listener-class>
      org.springframework.web.context.request.RequestContextListener
    </listener-class>
  </listener>

org.springframework.web.context.request.RequestContextListener
到您的web.xml

如果这没有帮助,请添加关于web.xml和jsf配置的更多信息

  <listener>
    <listener-class>
      org.springframework.web.context.request.RequestContextListener
    </listener-class>
  </listener>