Jsf:两页主细节的bean作用域是什么



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

  • 关于自定义作用域的文档很差,我有点害怕人们抱怨它有bug,工作不好
  • 在我看来,我正在处理的场景似乎很一般,所以我想知道为什么没有现成的解决方案

谢谢Filippo

如果详细信息页面必须是幂等的(即它是可永久链接的、可书签的、可搜索机器人爬网的),只需使用两个请求或视图范围的bean,并使用一个带有实体ID作为请求参数的GET链接从主页转到详细信息页面。另请参阅为实体创建主细节页、如何链接它们以及选择哪个bean范围以获取具体示例。

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

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

每次重新加载主页面可能是有效的,例如,如果在查看详细信息页面后数据可能发生了更改。然而,如果你想让数据的可用时间超过@ViewScoped,你的选择是:

  • 您应该使用JEE6,JSF 2.0是JEE6的一部分,所以请查看Conversation Scope(CDI的一部分)
  • JEE6 CDI的一些附加作用域可通过MyFaces CODI获得
  • 可能会使用会话作用域,并确保在"请求"命中时进行整理,而该请求不是针对"主控页"或"详细信息"页
  • 修改您的设计以使用Ajax,因此如果单击母版页上的记录,其详细信息将加载在同一视图中。然后您可以使用@ViewScoped

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

最新更新