0

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

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

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

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 的实例?谢谢!

4

3 回答 3

2

我只是想用正确的答案来跟进我自己的问题——即使需要 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);
}
于 2012-05-18T07:35:25.703 回答
1

您可以在MyFaces 网页上阅读:

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

于 2011-06-24T13:34:21.220 回答
0

确实,JSF 2.1 正式要求这样做,但理论上可以使用 JSP 2.0 运行 MyFaces Core 2.1。如果您可以使用 MyFaces Core 1.2.x 运行应用程序,那么您很有可能使用 2.1 来运行,因为没有技术原因无法运行。尝试在MyFaces 用户列表上询问。我做了一个检查,有些用户在 WebSphere 6.1 上运行 1.2.x 应用程序,所以也许你可以在那里获得更好的运气。

于 2011-06-25T04:44:39.227 回答