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

时间:2010-09-23 23:55:58

标签: java spring jsf

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

是否有特定的方法可以为jsf中的每个浏览器实例创建托管bean的新实例

欣赏任何帮助

鲍勃

2 个答案:

答案 0 :(得分:2)

“问题”出现在您的网络浏览器中。它在所有实例/窗口/选项卡之间共享相同的会话。这是正常行为。在JSF 2.x中,您可以通过将bean放在view范围内来“修复”这个问题,只要您每次提交并导航回相同的视图,这将使bean保持活动状态。在缺少view范围的JSF 1.x中,您可以通过将bean放在request范围内并使用Tomahawk's <t:saveState>RichFaces' <a4j:keepAlive>来实现所需的行为,或JBoss Seam会话范围MyFaces Orchestra

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

答案 1 :(得分:0)

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

但是,正如之前的人所描述的那样,你不能为每个浏览器窗口提供新的会话bean实例。