在运行时获取JSF中所有托管Bean的列表 [英] Get List of All Managed Beans in JSF at runtime

查看:80
本文介绍了在运行时获取JSF中所有托管Bean的列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想获得JSF应用程序中所有托管bean的列表。在Spring中,我可以执行 context.getBeansOfType()之类的操作。 JSF中是否有相应的方法?

I'd like to get a list of all managed beans in a JSF application. In Spring, I can do something like context.getBeansOfType(). Is there a corresponding method in JSF?

我有一些实现接口的 @ManagedProperty bean。我想获取这些适配器的列表并循环遍历它们,而不是显式调用每个bean以保持代码清洁。

I have a number of @ManagedProperty beans that implement an interface. I'd like to get a list of these adapters and loop through them rather than invoke each bean explicitly in order to keep the code clean.

谢谢

推荐答案

您可以使用 com中的 BeanManager 类来完成此操作。 sun.faces.mgbean package:

You can do this with BeanManager class from com.sun.faces.mgbean package:

ApplicationAssociate application = ApplicationAssociate.getInstance(FacesContext.getCurrentInstance().getExternalContext());
BeanManager beanManager = application.getBeanManager();
Map<String, BeanBuilder> beanMap = beanManager.getRegisteredBeans();
Set<Entry<String, BeanBuilder>>beanEntries = beanMap.entrySet();

for (Entry<String, BeanBuilder> bean: beanEntries) {
  String beanName = bean.getKey();
  if (beanManager.isManaged(beanName)) {
    BeanBuilder builder = bean.getValue();
    System.out.println("Bean name: " + beanName);
    System.out.println("Bean class: " + builder.getBeanClass());
    System.out.println("Bean scope: " + builder.getScope());
  }
}

注意:这是与Mojarra JSF实现紧密结合,不适用于其他实现。

NOTE: This is tightly coupled with Mojarra JSF implementation and doesn't work on other implementations.

这篇关于在运行时获取JSF中所有托管Bean的列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆