Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ViewScope bean状态在Mojarra和MyFaces中的保存方式不同_Java_Multithreading_Jsf_Myfaces_Mojarra - Fatal编程技术网

Java ViewScope bean状态在Mojarra和MyFaces中的保存方式不同

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(

我有一个观点,你可以开始一个昂贵的过程。该视图与@ViewScoped bean配对,如果进程启动,则使用PrimeFaces定期检查状态。我有下面的
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
假的