web-dev-qa-db-ja.com

JSFページでのEL変数の定義と再利用

変数を定義し、後で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}"
/>

何か案は ?ありがとうございました !

56
bertie

これには <c:set> を使用できます。

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

このEL式は一度評価され、リクエストスコープに保存されます。これは、 ビルド時間の表示 の間に値が使用可能な場合にのみ機能することに注意してください。そうでない場合は、scope属性を削除して、それが真の「エイリアス」になるようにする必要があります。

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

したがって、このはリクエストスコープ内の評価された値をキャッシュしないことに注意してください!毎回再評価されます。

Do[〜#〜] not [〜#〜]<ui:param>を使用します。 <ui:composition>または<ui:decorate>で定義されているtemplateにパラメーターを渡すために使用されていないため、本質的にそれを悪用した場合、動作は指定されず、実際には可能であれば、使用されているJSF実装のバグ。これに頼るべきではありません。 JSF2 FaceletsのJSTL ...理にかなっていますか?

104
BalusC

MVCのすべてのビューと同様に、ページはできるだけシンプルにする必要があります。ショートカットが必要な場合は、ショートカットをcontroller@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}"
/>
20
Matt Ball