Jsf:两页主细节的bean范围是什么?

Jsf:两页主细节的bean范围是什么?,jsf,scope,Jsf,Scope,在jsf应用程序中,我有一个包含汇总数据的表。如果我对详细信息感兴趣,我可以单击一行,然后在另一页中查看详细信息。 如果“母版”页面的托管bean是ion view范围,那么每次我从“详细信息”页面返回时,它都会被重新创建,如果用户应该更多地检查详细信息,我认为这不是一个好主意。我可以解决将bean放入会话中的问题,但这样,当用户在完全不同的部分与应用程序交互时,bean(和数据)也会保存在内存中。我可能需要一个自定义范围,但: 关于自定义范围的文档很差,我有点害怕人们抱怨它有bug,工作不好

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

  • 关于自定义范围的文档很差,我有点害怕人们抱怨它有bug,工作不好
  • 在我看来,我正在处理的场景非常普遍,所以我想知道为什么没有现成的解决方案
谢谢
Filippo

每次重新加载母版页可能是有效的,例如,如果在查看详细信息页面后数据可能已更改。但是,如果要使数据的可用时间超过@viewscope,您可以选择:

  • 您应该使用JEE6,JSF2.0是其中的一部分,所以请查看对话范围(CDI的一部分)
  • JEE6 CDI的一些附加作用域可通过
  • 可能会使用会话范围,并确保在出现不属于母版页或详细信息页的请求时进行整理
  • 重新设计以使用Ajax,因此如果单击母版页上的记录,其详细信息将加载到同一视图中。然后可以使用@ViewScoped

我更喜欢看对话的范围。您没有提到您正在运行的JSF实现或在哪个环境中。

如果细节页面必须是幂等的(即,它是永久对齐的、可书签的、可搜索的),只需使用两个请求或视图范围的bean,并使用带有实体ID的GET链接作为请求参数,从母版页转到细节页。另请参见以获取具体示例

如果详细信息页不需要是幂等的,则始终可以在同一视图中有条件地呈现母版和详细信息,甚至可以在母版页上的某个模式对话框中显示详细信息。通过这种方式,您可以继续使用单个视图范围的bean


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

我阅读了对话范围,但在我看来,如果你有一个菜单,你可以去别处,就不可能结束对话,这是必须明确地调用托管bean的方法。