使用Servlet 2.4访问JSF2.1中的另一个托管Bean



我们最近从JSF 1.2升级到了2.1。我们在WebSphere 6.1上运行,它具有Servlet 2.4

我们正在使用以下库:myfaces 2.1.1el-api-2.2

现在,我们唯一的问题是,我们无法像以前那样访问其他BackingBeans:

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中获得另一个支持Bean的实例?谢谢

我只是想用正确的答案来回答我自己的问题-即使需要Servlet 2.5,我的任务也可以在没有它的情况下存档

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);
}

正如您在MyFaces网页上看到的:

JSF 2.1需要java 1.5或更高版本、JSP 2.1、JSTL 1.2和java Servlet 2.5实现。

JSF 2.1官方确实要求这样做,但理论上可以使用JSP 2.0运行MyFaces Core 2.1。如果你可以用MyFacesCore1.2.x运行一个应用程序,那么你有可能用2.1来运行,因为没有技术原因不能运行。试着在MyFaces用户列表上询问。我做了一次检查,有一些用户在WebSphere6.1上运行1.2.x应用程序,所以也许你可以在那里运气更好。

相关内容

  • 没有找到相关文章

最新更新