Доступ к другому управляемому компоненту в JSF2.1 с помощью Servlet 2.4

Недавно мы обновили JSF 1.2 до 2.1. Мы работаем на WebSphere 6.1 с сервлетом 2.4.

Мы используем следующие библиотеки: myfaces 2.1.1 el-api-2.2

Теперь единственная проблема, которая у нас есть, заключается в том, что мы не можем получить доступ к другим компонентам поддержки, как это было раньше, с помощью:

public static Object getBackingBean( String pName ) {
  ELContext elContext = FacesContext.getCurrentInstance().getELContext();
  Object ret = elContext.getELResolver().getValue(elContext, null, pName);
  return ret;
}

Это всегда будет возвращать null. Мы также пробовали:

Beanclass bean = (Beanclass) FacesContext.getCurrentInstance().getApplication()
.getELResolver().getValue(elContext, null, "beanclass");

которые также возвращают null.

Мы пробовали аннотацию @ManagedProperty, но, по-видимому, это функция Servlet 2.5. Возможно ли, что ELContext теперь по умолчанию использует DI? Есть ли способ получить экземпляр другого компонента поддержки в JSF2.1 и Servlet 2.4? Спасибо!


person toby    schedule 24.06.2011    source источник


Ответы (3)


Я просто хотел дополнить свой вопрос правильным ответом - хотя Servlet 2.5 требуется, моя задача может быть выполнена без него. Вот как надежно получить экземпляр sessionBean:

BeanClass beanInst = (BeanClass) JSF2Util.findBean("beanClass");

public static <T> T findBean(String beanName) {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    Application app = facesContext.getApplication();
    ExpressionFactory elFactory = app.getExpressionFactory();
    ELContext elContext = facesContext.getELContext();
    ValueExpression valueExp = elFactory.createValueExpression(elContext, "#{" + beanName + "}",Object.class);
    return (T) valueExp.getValue(elContext);
}
person toby    schedule 18.05.2012

Как вы можете прочитать на веб-странице MyFaces:

Для JSF 2.1 требуется Java 1.5 или новее, JSP 2.1, JSTL 1.2 и реализация Java Servlet 2.5.

person egbokul    schedule 24.06.2011

Это правда, что официально JSF 2.1 требует этого, но теоретически можно запустить MyFaces Core 2.1 с JSP 2.0. Если вы можете запустить приложение с MyFaces Core 1.2.x, есть вероятность, что вы сможете сделать это с помощью 2.1, потому что нет технических причин, по которым это не может работать. Попробуйте спросить в списке пользователей MyFaces. Я проверил, есть пользователи, которые запускают приложения 1.2.x в WebSphere 6.1, так что, возможно, вам повезет больше.

person lu4242    schedule 25.06.2011
comment
Спасибо - я разместил его в списке пользователей MyFaces. - person toby; 26.06.2011