В сервлете вы можете получить запрос bean-объекта фасоли по:
Bean bean = (Bean) request.getAttribute("beanName");
и сессионные компоненты в области видимости:
Bean bean = (Bean) request.getSession().getAttribute("beanName");
и область применения бобов:
Bean bean = (Bean) getServletContext().getAttribute("beanName");
Если вы работаете в фреймворке / контейнере, поддерживающем внедрение зависимостей, и bean-компонент управляется CDI @Named
вместо JSF @ManagedBean
, это еще проще:
@Inject
private Bean bean;
Независимо от области действия, когда вы на самом деле внутри FacesContext
(т.е. текущий HTTP-запрос был обслужен через FacesServlet
), то обычным способом JSF2 является Application#evaluateExpressionGet()
:
FacesContext context = FacesContext.getCurrentInstance();
Bean bean = context.getApplication().evaluateExpressionGet(context, "#{beanName}", Bean.class);
, который может быть получен следующим образом:
@SuppressWarnings("unchecked")
public static <T> T findBean(String beanName) {
FacesContext context = FacesContext.getCurrentInstance();
return (T) context.getApplication().evaluateExpressionGet(context, "#{" + beanName + "}", Object.class);
}
и может использоваться следующим образом:
Bean bean = findBean("bean");
Однако, если вы уже находитесь внутри @ManagedBean
, тогда использование @ManagedProperty
будет чище, поскольку оно более декларативно.
@ManagedProperty("#{bean}")
private Bean bean;