我正在使用。 我的托管bean在会话范围内定义。当我打开一个新的浏览器时,第一次调用托管bean的构造函数。但在那之后,当我打开另一个浏览器实例时,我直接看到该方法被调用而不是通过托管bean的构造函数。
是否有特定的方法可以为jsf中的每个浏览器实例创建托管bean的新实例
欣赏任何帮助
鲍勃
答案 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实例。