Jsf:两页主 - 详细信息的bean范围是什么?

时间:2012-02-29 07:53:35

标签: jsf scope

在jsf应用程序中,我有一个包含汇总数据的表。如果我对细节感兴趣,可以点击一行,查看另一页的详细信息。 如果'master'页面的托管bean是离子视图范围,那么每次从'detail'页面返回时都会重新创建它,如果用户应该查看详细信息,我认为这不是一个好主意。更多次。我可以解决将bean放在会话中的问题,但这样,当用户在完全不同的部分与应用程序交互时,bean(和数据)也会保存在内存中。可能我需要一个自定义范围,但是:

  • 关于自定义范围的文档很差,我有点害怕人们抱怨它有错误而且效果不好。
  • 我正在处理的场景在我看来相当普遍,所以我想知道为什么没有现成的解决方案。

由于 菲利普

2 个答案:

答案 0 :(得分:2)

如果详细信息页面必须是幂等的(即它是永久链接的,可收藏的,searchbot-crawlable的),只需使用两个请求或视图范围的bean并使用带有实体ID作为请求参数的GET链接从主页面转到详细信息页。另请参阅Creating master-detail pages for entities, how to link them and which bean scope to choose以获取具体示例。

如果细节页面不需要是幂等的,那么您始终可以在同一视图中有条件地渲染主图和细节,甚至可以在母版页的某个模态对话框中显示细节。这样,您可以继续使用单个视图范围的bean。

在JSF方面,您不必过于担心数据库性能成本。而是在持久层中配置和微调它。例如,在JPA中,您可以设置二级缓存。如果你的项目超过500~1000,那么请考虑数据库级别的分页。

答案 1 :(得分:1)

每次重新加载母版页可能是有效的,例如如果在查看详细信息页面后数据可能已更改。但是,如果您希望将数据保留的时间超过@ViewScoped,则选项为:

  • 你应该使用JSF 2.0所属的JEE6,所以看看Conversation Scope(CDI的一部分)
  • 通过MyFaces CODI
  • 可以获得JEE6 CDI的一些其他范围
  • 潜在地使用会话范围并确保在请求点击时不会为主页或详细信息页面进行整理
  • 重新设计您的设计以使用Ajax,因此如果单击Master页面上的记录,其详细信息将加载到同一视图中。然后,您可以使用@ViewScoped

我倾向于查看对话范围。您没有提到您正在运行的JSF实现或在哪个环境中。