首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于JSF2托管bean作用域机制(请求范围)的web应用程序设计问题

关于JSF2托管bean作用域机制(请求范围)的web应用程序设计问题
EN

Stack Overflow用户
提问于 2013-11-27 00:21:25
回答 1查看 152关注 0票数 0

关于JSF2托管bean作用域机制(请求范围)引起的设计问题,我有一个问题。

我正在使用primefaces4的tabview组件和datatable组件构建一个web应用程序。每个选项卡都有一个datatable,其中包含从具有请求范围的托管bean中检索的数据,后者使用JDBC从数据库中获取数据。因此,每当用户单击一个选项卡时,托管bean将从数据库中检索数据。整个体系结构就是这样设计的。很简单。

对每个ManagedBean使用@RequestScoped的目的是,用户在选择每个选项卡(每个请求)时都希望看到数据库中的实时数据。所有其他范围都不适用。问题是,当用户选择一个选项卡时,所有选项卡数据库访问逻辑都会被执行。我认为这是因为Ajax调用请求,因此每个@RequestScoped bean都被调用。

这导致了两个缺点: 1.性能不好。用户需要等待4-5秒才能看到datatable在所有bean执行后出现。2.过多无用的数据库访问。

我的解决方案是使用Spring调度器来管理从托管bean中分离出来的线程中的所有数据库访问,然后添加一个数据缓存层来与托管bean交互。Spring调度器可以设计为每10分钟访问一次数据库,轮询数据并将其放入数据缓存中。这样,托管bean将访问内存中的所有数据。然后,我想使用Primefaces将数据推送到客户端,这样用户就不需要刷新浏览器。

显然,它不是实时的,但解决了两个问题说明。

还有其他更好的或简化的解决方案吗?

谢谢!

  1. 将ManagedBean更改为sessionScoped
  2. 添加tabviewListener
  3. 添加tabview类来处理选项卡开关
  4. 在tabview类中,使用本文中的方法在运行时获得托管bean。 JSF 2 : Accessing managed bean's instance in the phase listener object?
  5. 在tabview页面中,使用cache="true“来提高性能,并让tabViewListner更新整个tabview组件,该组件将更新内部的数据。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-27 00:29:04

您应该更改bean的视图范围,并更改页面逻辑,以便在单击选项卡时更新表,而不是在每次请求后抛出整个bean。查看PrimeFaces请求并单击选项卡,调用bean上的一个方法,该方法检索新数据,然后由p:dataTable引用,等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20230690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档