Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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 JSF:如何强制为每个浏览实例创建一个新的托管bean实例_Java_Spring_Jsf - Fatal编程技术网

Java JSF:如何强制为每个浏览实例创建一个新的托管bean实例

Java JSF:如何强制为每个浏览实例创建一个新的托管bean实例,java,spring,jsf,Java,Spring,Jsf,我正在使用。 我的托管bean是在会话范围中定义的。当我打开一个新浏览器时,托管bean的构造函数第一次被调用。但在那之后,当我打开另一个浏览器实例时,我直接看到该方法正在被调用,而不是通过托管bean的构造函数 有没有具体的方法,为jsf中的每个浏览器实例创建托管bean的新实例 通知任何帮助 鲍勃:“问题”出在你的网络浏览器上。它在所有实例/窗口/选项卡之间共享同一会话。这是正常的行为。在JSF2.x中,您可以通过将bean放在视图范围中来“修复”这个问题,只要您每次提交并导航回同一视图,这

我正在使用。 我的托管bean是在会话范围中定义的。当我打开一个新浏览器时,托管bean的构造函数第一次被调用。但在那之后,当我打开另一个浏览器实例时,我直接看到该方法正在被调用,而不是通过托管bean的构造函数

有没有具体的方法,为jsf中的每个浏览器实例创建托管bean的新实例

通知任何帮助

鲍勃:“问题”出在你的网络浏览器上。它在所有实例/窗口/选项卡之间共享同一会话。这是正常的行为。在JSF2.x中,您可以通过将bean放在
视图
范围中来“修复”这个问题,只要您每次提交并导航回同一视图,这个bean就会保持活动状态。在缺少
视图
作用域的JSF1.x中,您可以通过将bean放置在
请求
作用域中并使用、或、或的对话作用域或来实现所需的行为


同样,这个问题不是特定于JSF的。标准HTTP规范根本不提供任何方法来区分客户端的状态(新实例、选项卡或窗口)和服务器端。

第一种方法,最明显的方法是使用请求范围bean


但是,正如前面的人所描述的,您不能为每个浏览器窗口都有会话bean的新实例。

谢谢您的响应。您能告诉我,如何使用
@ViewScoped
view
在视图范围内定义bean吗。再一次,这只是JSF2.x。在JSF 1.x中,您只有
请求
会话
应用程序
。谢谢您的帮助。最后一个问题,我正在使用JSF2.0(Mojarra),并且我有一个preRenderView事件,那么a4j:keepAlive会工作吗?因为,我试过了,但没有看到任何效果。在Mojarra 2.0中,您可以将bean放在视图范围内。将
@ViewScoped
注释添加到bean类中。当您在表单提交后导航回同一页面时,bean将保持活动状态。只有在刷新页面或打开新窗口/选项卡时,才会创建新bean。RichFaces与JSF 2.0不兼容。如果我使用@viewScope,则页面会重定向到不同的页面,但视图(means选项卡)不会更改。它能工作并且不会丢失我的bean数据吗?