Эта информация недоступна стандартному API JSF. Лучшее, что вы можете получить - это пройти все области запросов, сессий и приложений следующим образом (код скопирован из этого блога ):
public static String lookupManagedBeanName(Object bean) {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
Map<String, Object> requestMap = externalContext.getRequestMap();
for (String key : requestMap.keySet()) {
if (bean.equals(requestMap.get(key))) {
return key;
}
}
Map<String, Object> sessionMap = externalContext.getSessionMap();
for (String key : sessionMap.keySet()) {
if (bean.equals(sessionMap.get(key))) {
return key;
}
}
Map<String, Object> applicationMap = externalContext.getApplicationMap();
for (String key : applicationMap.keySet()) {
if (bean.equals(applicationMap.get(key))) {
return key;
}
}
return null;
}
Однако, есть большое , но , это не работает внутри конструктора бина просто потому, что JSF еще не поместил его ни в одну область видимости! Вы должны определить это на более позднем этапе, например, в методе действия.
public void submit() {
String name = lookupManagedBeanName(this);
// ...
}
Не имеет отношения к конкретной проблеме , это запах конструкции. Конкретное функциональное требование, для которого вы думали, что это решение, должно определенно решаться иначе.