0

最近、JSF1.2から2.1にアップグレードしました。サーブレット2.4を搭載したWebSphere6.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アノテーションを試しましたが、これは明らかにサーブレット2.5の機能です。ELContextがデフォルトでDIを使用する可能性はありますか?JSF2.1とサーブレット2.4で別のバッキングBeanのインスタンスを取得する方法はありますか?ありがとう!

4

3 に答える 3

2

私は正しい答えで自分の質問をフォローアップしたかっただけです-サーブレット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 Webページで読むことができるように:

JSF 2.1 には、Java 1.5 以降、JSP 2.1、JSTL 1.2、およびJava Servlet 2.5実装が必要です。

于 2011-06-24T13:34:21.220 に答える
0

公式にはJSF2.1でそれが要求されているのは事実ですが、理論的にはMyFacesCore2.1をJSP2.0で実行することは可能です。MyFaces Core 1.2.xでアプリケーションを実行できる場合、2.1で実行できる可能性があります。これは、実行できない技術的な理由がないためです。MyFacesユーザーリストで質問してみてください。私がチェックしたところ、WebSphere 6.1で1.2.xアプリケーションを実行しているユーザーがいるので、幸運を祈る可能性があります。

于 2011-06-25T04:44:39.227 に答える