考慮到您使用的是OmniFaces,您可以使用Beans#getActiveInstances()
方法Beans
utility class來獲取給定CDI範圍內的所有活動實例。
Map<Object, String> activeViewScopedBeans = Beans.getActiveInstances(ViewScoped.class);
// ...
關鍵是bean實例,值是bean名稱。
對於技術上有興趣,這裏是該實用程序方法的concrete implementation:
public static <S extends Annotation> Map<Object, String> getActiveInstances(BeanManager beanManager, Class<S> scope) {
Map<Object, String> activeInstances = new HashMap<>();
Set<Bean<?>> beans = beanManager.getBeans(Object.class);
Context context = beanManager.getContext(scope);
for (Bean<?> bean : beans) {
Object instance = context.get(bean);
if (instance != null) {
activeInstances.put(instance, bean.getName());
}
}
return Collections.unmodifiableMap(activeInstances);
}
的BeanStorage
僅供內部使用。此外,它沒有在showcase中列出。