我想获取JSF应用程序中所有托管bean的列表。在春季,我可以做类似context.getBeansOfType()的事情。 JSF中有相应的方法吗?

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

谢谢

最佳答案

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

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

07-25 22:24