1

この問題に似たJavaBeanからssjsを呼び出す必要があります。問題は、実行する必要のあるコードが構成ドキュメントからのものであり、次のようになっている可能性があることです。

getComponent("xxx").getValue();

私は次のようなバージョンを作成しました:

String compute = doc.getItemValueString("SSJSStuff");
String valueExpr = "#{javascript:" + compute + "}";
FacesContext fc = FacesContext.getCurrentInstance();
Application app = fc.getApplication();
ValueBinding vb = app.createValueBinding(valueExpr);
String vreslt = vb.getValue(fc).toString();

しかし、私は得る"Exception in xxx: com.ibm.xsp.exception.EvaluationExceptionEx: Error while executing JavaScript computed expression"

近くにいると思いますが、丘の向こうには見えません。

4

1 に答える 1

2

これにはいくつかの可能性があります。

  1. 変数computeが空です

  2. 計算に不正な文字が含まれています

  3. 計算内のコードの形式が正しくありません/正しい構文がありません

  4. SSJS コードでオブジェクトが返されません。

    SSJS コードが何も返さない場合、vb.getValue(fc)はnullを返します。toString()は失敗します。これを防ぐには、返すオブジェクトを明示的にキャストする必要があります。

    vreslt = (String) vb.getValue(fc);
    

お役に立てれば

スヴェン

編集:投稿を読み直した後、動的な SSJS コードでgetComponent
を実行したいことがわかりました。これは、 javax.faces.application.Applicationに追加された値バインディングでは機能しません。このためには、代わりにcom.ibm.xsp.page.compiled.ExpressionEvaluatorImplオブジェクトを使用する必要があります。

String valueExpr = "#{javascript:" + compute + "}";
FacesContext fc = FacesContext.getCurrentInstance();
ExpressionEvaluatorImpl evaluator = new ExpressionEvaluatorImpl( fc );
ValueBinding vb = evaluator.createValueBinding( fc.getViewRoot(), valueExpr, null, null);
vreslt = (String) vb.getValue(fc);
于 2012-04-26T06:16:15.423 に答える