【问题标题】:Create managed bean application scoped to load on the app start-up创建作用域为在应用启动时加载的托管 bean 应用程序
【发布时间】:2014-09-14 18:23:14
【问题描述】:

我是 Java EE 的新手,我有一个任务要做,但不知道如何去做。 我需要创建一个将在应用程序范围内的管理 bean。每次我们启动应用程序时,bean 都需要从数据库中加载数据列表。 所以,根据我对网络的研究,我需要:

  1. 创建一个托管 Bean。
  2. 将 bean 名称作为应用程序范围的 bean 添加到 faces-config。
  3. 在 bean 上,添加所有加载数据的方法。

那么如何在应用程序启动时设置加载?那么如何从应用中的任何地方获取这些加载的数据呢?

【问题讨论】:

  • 您确定要使用托管 bean,而不是像 EHCache 这样可扩展性更高的缓存解决方案吗? ehcache.org
  • 和你一样,我不会使用托管 bean 但很遗憾我不负责技术解决方案......
  • how to get these loaded datas from anywhere in the app? 这是一个设计问题。如果您为此使用托管 bean,您将使该数据只能从 JSF/Http 会话中访问。您需要使用 EJB 或此处提到的类似工具。

标签: java jsf managed-bean faces-config


【解决方案1】:

从 JSF 2.x 开始这很容易,只需将属性 eager 添加到 @ManagedBean 注释即可。

@ApplicationScoped
@ManagedBean(eager=true)
public class InitializerBean {

    @PostConstruct
    public void init() {
         //init your DB here
    }

}

【讨论】:

  • 感谢您的回答。我将 eager 属性放在 faces-config 中托管 bean 的定义上。然后我想看看它是否有效,所以我在 Init 方法中放置了一个信息记录器,但是当我启动应用程序时它什么也没显示,这是否正常?
  • 这取决于您的记录器的设置。还有你所说的“启动应用程序”是什么意思?这个 bean 将在第一次访问某个 JSF 页面时创建,而不是在应用程序部署期间创建。
  • 这可能是一个原因,你在使用javax.faces.bean 包吗?
  • @HubertSolecki 你用的是什么版本的 JSF?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 2021-03-18
  • 2011-06-21
  • 2011-08-19
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多