【发布时间】:2012-02-02 21:14:29
【问题描述】:
我有一个员工会话 bean,其中包含同一类的相关员工 bean 的列表。我的用户需要能够查看“主要”员工,并从该员工生成多个浏览器窗口以显示相关员工的信息,但保持“主要”或“根”员工视图处于活动状态,以便他们可以继续从那里工作。
我认为当前正在发生的事情是 JSF 将打开一个新窗口并呈现相关员工,但随后会丢失原始窗口/视图的跟踪,因此如果您单击命令链接或从原始窗口运行任何内容(在您使用命令链接中的目标属性生成新窗口)第二个操作将不会运行或调用会话 bean 中的任何方法,除了重新加载页面之外,它似乎没有做任何事情。我相信是因为您正试图从不再注册的旧 JSF 视图运行操作,所以当框架收到来自这个陈旧视图的请求时,它必须注册?也许吧?
本质上,我试图为同一用户激活多个显示相同会话 bean 类型的会话,并将每个会话 bean 视图附加到单独的浏览器窗口。
如果您有任何想法,请告诉我。或者如果有更好的方法来做到这一点。
【问题讨论】:
-
请在描述具体问题时更加具体。从开发人员的角度进行阐述,而不是从最终用户的角度进行阐述。例如,当您说 “如果您尝试从原始窗口运行命令时会发生什么,它会忽略它”.
-
对不起,感谢您的建设性批评。我将编辑并添加更多信息。
-
我认为您正在寻找的一句话就是如何在用户在另一个视图中工作而不获取 ViewExpiredException 时保持一个视图处于活动状态。 Mojarra(逻辑视图的数量)和 MyFaces(MYFACES-3117 参见 org.apache.myfaces.NUMBER_OF_SEQUENTIAL_VIEWS_IN_SESSION Web 配置参数)都有一些解决这个问题的方法已经足够好了,但最终的解决方案可能在 JSF 2.2 上。
-
您的应用程序的行为方式很大程度上取决于您用于导航的组件(即
h:link或h:commandLink)和支持bean 的范围(请求、会话等)。 )。任何人都需要查看一些 XHTML 和 Java 源代码才能理解您为什么会看到这种行为。