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

时间:2011-06-24 10:54:02

标签: java jsf jsf-2 websphere myfaces

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

我们使用以下库: myfaces 2.1.1 EL-API-2.2

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

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

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

正如您可以阅读the MyFaces webpage

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

答案 2 :(得分:0)

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