托管bean的两个实例

时间:2011-08-22 12:53:01

标签: jsf managed-bean ajax4jsf

当我第一次访问我的页面时,页面使用的托管bean实例化两次(我在构造函数中传递两次,具有相同的堆栈跟踪):

Daemon Thread [http-127.0.0.1-8080-1] (Suspended (breakpoint at line 76 in MyController))   
    MyController.<init>() line: 76  
    NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]   
    NativeConstructorAccessorImpl.newInstance(Object[]) line: 39    
    DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 27    
    Constructor<T>.newInstance(Object...) line: 513 
    Class<T>.newInstance0() line: 355   
    Class<T>.newInstance() line: 308    
    ManagedBeanBuilder(BeanBuilder).newBeanInstance() line: 186 
    ...
    pass throught two Filters (one of the filter uses Waffle and the other calls a web service...)  
    ...     
    Http11Protocol$Http11ConnectionHandler.process(Socket) line: 601    
    JIoEndpoint$Worker.run() line: 447  
    Thread.run() line: 662  

在xhtml中:

<a4j:keepAlive beanName="myController"></a4j:keepAlive>
<h:form>
...
</h:form>

在faces-config.xml中:

<managed-bean>
        <managed-bean-name>myController</managed-bean-name>
        <managed-bean-class>com.xx.MyController</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

为什么托管bean有两次实例化?

感谢您的想法...

使用

  • jsf 1.2
  • richfaces 3.3.2.SR1

编辑: 感谢Joeri Hendrickx,我发现我有两个不同的请求。所以新问题是“当我访问我的页面时,为什么我有两个请求?”

1 个答案:

答案 0 :(得分:3)

如果您获得了两个请求范围的bean实例,那么这意味着您有两个请求。

检查您的浏览器是否发出了两个请求(使用firebug或fiddler)。如果它只发送一个,那意味着你的请求在堆栈中的某个地方重复(可能在过滤器中,或者甚至在自定义servlet中)。