Java ViewScope bean状态在Mojarra和MyFaces中的保存方式不同
我有一个观点,你可以开始一个昂贵的过程。该视图与@ViewScoped bean配对,如果进程启动,则使用PrimeFaces定期检查状态。我有下面的Java ViewScope bean状态在Mojarra和MyFaces中的保存方式不同,java,multithreading,jsf,myfaces,mojarra,Java,Multithreading,Jsf,Myfaces,Mojarra,我有一个观点,你可以开始一个昂贵的过程。该视图与@ViewScoped bean配对,如果进程启动,则使用PrimeFaces定期检查状态。我有下面的Runnable,它使用昂贵的操作调用Web服务 公共类生成器扩展了AsyncCaller{ 私有查看器bean; 私有字符串id; 公共生成器(查看器bean、客户端、字符串id){ 超级(客户); this.bean=bean; this.id=id; } @凌驾 公开募捐{ ClientResponse response=getClient(
Runnable
,它使用昂贵的操作调用Web服务
公共类生成器扩展了AsyncCaller{
私有查看器bean;
私有字符串id;
公共生成器(查看器bean、客户端、字符串id){
超级(客户);
this.bean=bean;
this.id=id;
}
@凌驾
公开募捐{
ClientResponse response=getClient().generate(this.id);
布尔误差=
(response.getClientResponseStatus().getFamily()!=Family.SUCCESSFUL);
如果(错误){
异常e=新的统一接口异常(响应);
this.bean.setGenerateException(e);
}
this.bean.setGenerateError(错误);
}
}
我将这个Runnable
作为一个单独的线程启动,这样UI就不会被阻塞。如您所见,我将视图范围的托管bean实例传递给Runnable
,因此如果有错误,我可以在bean中设置它,然后在UI上显示它
我的问题是,对于Mojarra 2.1.6和2.1.26,这很好,但是对于MyFaces 2.1.13–我更喜欢使用–bean中的generateError
变量从来都不是true
,尽管我可以看到在调试中调用setGenerateError(true)
。与视图一起使用的实际bean与可从线程访问的bean实例不同。实际上,我可以在调试中看到这一点:对于MyFaces,每个轮询请求都会产生一个新的视图范围的bean实例,而对于Mojarra,它总是同一个实例
MyFaces中是否缺少
设置?根据规范,哪一个是正确的行为?在以下内容中找到了答案:
org.apache.myfaces.SERIALIZE_STATE_IN_SESSION
假的