2013-03-19 69 views
2

我想要獲取JSF應用程序中所有託管bean的列表。在春天,我可以做點像context.getBeansOfType()。 JSF中有相應的方法嗎?在運行時獲取JSF中所有託管Bean的列表

我有一些@ManagedProperty bean實現了一個接口。我希望得到這些適配器的列表並循環遍歷它們,而不是明確調用每個bean以保持代碼清潔。

謝謝

+0

這是什麼動機,或者只是好奇心? – 2013-03-19 14:38:25

+0

@LuiggiMendoza我會更新這個問題來澄清 – dev 2013-03-19 15:02:25

回答

4

您可以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()); 
    } 
} 

注:這是緊密結合鑽嘴魚科JSF實現和其他實現不起作用。

+4

注意:這個答案假設你使用Mojarra並在編譯時classpath中有它。這不適用於其他JSF實現,也不適用於JSF API。 – BalusC 2013-03-19 15:08:09

+0

@partlov,謝謝,但我沒有使用Mojarra。尋找一些通用的東西。 – dev 2013-03-19 17:35:15

+0

即使我沒有使用Mojarra,我也會授予這個答案,因爲它爲我的問題提供了真正的答案..它不能在JSF本地完成。 – dev 2013-05-22 23:57:20