В Servlet, вы можете получить запрос области действия фасоли по:
Bean bean = (Bean) request.getAttribute("beanName");
и сессионная область действия фасоли по:
Bean bean = (Bean) request.getSession().getAttribute("beanName");
и применение области видимости бобов пути:
Bean bean = (Bean) getServletContext().getAttribute("beanName");
Если вы работаете в инъекции зависимостей, способной рамочным/контейнер и боб управляется КДИ-х @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);
, которые могут быть convenienced следующим образом:
и могут быть использованы следующим образом:
Bean bean = findBean("bean");
Однако, когда вы уже внутри @ManagedBean
, то с помощью @ManagedProperty
более чистый, поскольку он более декларативный.
@ManagedProperty("#{bean}")
private Bean bean;
Я не уверен, что вы можете использовать эти новые аннотации вне JSF/EL, но я бы начал с рассмотрения спецификации JSR 299: http://jcp.org/en/jsr/detail?id=299 – McDowell
Другие люди, имеющие проблемы с подобными проблемами, также могут проверить https://bpcatalog.dev.java.net/ajax/jsf-ajax/ (связанные с AJAX и обработкой запросов/обработкой, а не получением bean-компонентов по имени) –