2011-10-20 13 views
0

を管理しますか?私は、次のことを試してみましたが、それは動作しません:解決EL式をプログラムシームにどのように我々は、Seamは豆を管理し、プログラムにJSF EL式を解決することができます豆

私のアプリケーションで
private String resolveExpression(String expression){ 

     if(expression == null) 
     { 
      return null; 
     } 

     javax.faces.context.FacesContext facesCtx = FacesContext.getCurrentInstance(); 
     Application app = facesCtx.getApplication(); 

     try 
     { 
      // Here we bind a value expression into the item, 
      // so it can dynamically change its language 
      ELContext elCtx = facesCtx.getELContext(); 
      ExpressionFactory ef = app.getExpressionFactory(); 
      ValueExpression ve = ef.createValueExpression(elCtx, expression, String.class); 

      return (String) ve.getValue(elCtx); 
     } 
     catch (ELException ex) { 
     } 

     return expression; 
    } 

私はシームのセッションスコープに座っていると、このBeanはプロパティnameを持っていることをUserという名前のBeanを持っています。 EL式は#{usr.name}ですが、この式はFaceletファイルで正常に動作している間は空を返します。

+0

あなたは#{usr.username}を試したことがありますか? – flash

+0

残念ながら '名前'は 'username'ではありません:D – Barcelona

+0

ここで 'ELException'を削除しないでください。その例外をログに記録してみてください。たぶん何らかのヒントがあります。 – flash

答えて

3

Seamは対処のための2つのユーティリティコンポーネントを提供すると呼ばれていますEL式:ExpressionsおよびInterpolator

ご利用の具体的なケースについては、実際に有効なValueExpressionが必要ないため、Interpolatorが正しい選択と考えられます。 Interpolatorは、EL式の文字列全体を解析し、それらのすべてを評価値に変換します。

Interpolator#interpolate()も( documentationを参照)の引数を受け入れることに注意してください。

例:

@Name("bean") 
@Scope(ScopeType.SESSION) 
class MyBean { 
    ... 

    public String getValue() { 
      return value; 
    } 

    ... 
} 

@Name("otherBean") 
@Scope(ScopeType.EVENT) 
class MyBean { 
    ... 

    public String getInterpolatedValue() { 
      return Interpolator.instance().interpolate("#{bean.value}"); 
    } 

    ... 

} 
1

Seamは表現オブジェクトを提供しました。私はこの瞬間を使用しており、うまくいきます。イベントコンテキストにあなたのオブジェクトを入れて、呼び出します。

Expressions.instance()createValueExpression(文字列)以降.getvalue()

更新:クラスが表現

+0

おかげではありませんが、それはまだ:( – Barcelona

+0

こんにちは動作しません。あなたが空を取得した場合あなたは?あなたは、既存のされている変数にアクセスしていることを確認していますそれはnormaly nullに解決somethingisを意味する。ハローは、このハロー返さなければ(一重引用符で)次の式の文字列として定義されているのでcreateValueExpression(「#{ 『ハロー』}」)のgetValue()のようsomethig簡単に試し生じます。私は、テンプレートからのメールを作成するには、このアプローチを使用して、私が作成。工場の時点で利用可能であるanyhingを使用することができます。コンポーネント。アンラップは。どんな文脈での変数。 –

+0

は私がログアウトし、同じユーザーで再度ログインしようとしましたが、私はこれを得ました私は以前のユーザーの情報を得ました。:(:(: – Barcelona

関連する問題