2011-06-22 9 views
45

変数を定義して後でEL式で変数を再利用することは可能ですか?例えばJSFページのEL変数の定義と再利用

:私が考えている何

<h:inputText 
    value="#{myBean.data.something.very.long}" 
    rendered="#{myBean.data.something.very.long.showing}" 
/> 

があるようなもの:

<!-- 
    somehow define a variable here like : 
    myVar = #{myBean.data.something.very.long} 
--> 
<h:inputText 
    value="#{myVar}" 
    rendered="#{myVar.showing}" 
/> 

任意のアイデア?ありがとうございました !

答えて

85

あなたはこのために<c:set>を使用することができます。

<c:set var="myVar" value="#{myBean.data.something.very.long}" scope="request" /> 

このEL式は、その後一度だけ評価し、要求スコープに保存されます。これは、view build timeの間に値が使用可能な場合にのみ機能することに注意してください。このが要求スコープで評価値をキャッシュしていないことをこれ

<c:set var="myVar" value="#{myBean.data.something.very.long}" /> 

注:付属していない場合、それは真の「エイリアス」になるように、あなたはscope attribtueを削除する必要があると思います!それは毎回再評価されます。

+1

うわー、ありがとう!私はui:paramはテンプレートで使用される変数のみを提供し、ui:compositionを使用すると考えました。これは、ui:compositionを使用していないのに、私が作るすべてのjsfページがfaceletであることを意味しますか? – bertie

+0

@BalusC、値をキャッシュしないとどういう意味ですか? –

+6

@Msaleh: '#{myVar} 'を呼び出すたびに、'#{myBean.data.something.very.long} 'が再評価されます。セット中に一度だけ評価されることはありません。それは単なる「エイリアス」です。 – BalusC

18

MVCの任意のビューと同様に、ページはできるだけ単純なである必要があります。ショートカットを作成する場合は、コントローラ(@ManagedBeanまたは@Named bean)のショートカットをコントローラに入れます。

コントローラー:

@Named 
public MyBean 
{ 
    public Data getData() 
    { 
     return data; 
    } 

    public Foo getFooShortcut() 
    { 
     return data.getSomething().getVery().getLong(); 
    ] 
} 

ビュー:

<h:inputText 
    value="#{myBean.fooShortcut}" 
    rendered="#{myBean.fooShortcut.showing}" 
/> 
+0

バッキングビーンから私のメタデータオブジェクトを取得する完璧なソリューションです。ありがとう! – nettie