繁体   English   中英

在运行时获取JSF中所有托管Bean的列表

[英]Get List of All Managed Beans in JSF at runtime

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

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

谢谢

您可以使用com.sun.faces.mgbean包中的BeanManager类来执行此操作:

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实现紧密结合,在其他实现上不起作用。

如果您的bean已经在会话中,则可以尝试以下代码:

Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
for (Entry<String, Object> beanEntry : sessionMap.entrySet()) {
    String beanName = beanEntry.getKey();
    Object bean = beanEntry.getValue();
    //TODO do something with bean, i.e. check if it's implements your interface and store into list
}

说到会话中有一个bean,是指该bean已被创建并在同一会话中的另一个对象中使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM