0

マネージド Bean に値のリストがあります。

値

120
70
30
60

ただし、要件は、これらの値を赤 (0%) と緑 (100%) の間の色にマップすることです。この変換された色の値を、EL(式言語)式である属性を持つデータ駆動型コンポーネント(に似たものh:dataTable)の列に提供する必要があります。

したがって、パーセンテージから色への変換には、ここに示す単純なアルゴリズムを使用できます。JavaScript ですが、Java で簡単に記述できます。このメソッドcolor()を呼び出して、元の List(values) を持つマネージド Bean で宣言します。

 Color  color(double percentage){}

今私の問題は、最初にパーセンテージをこのメソッドに渡し、次に変換された Color 値を実行時にコンポーネントに戻す方法です。

例えば

<nameSpace:dataTable  values="#{bean.Values} var="row" ...>
   <nameSpace:column  color="#{expression language syntax}" -->

したがって、この表現言語は次のことができるはずです。

  1. 最初にパーセンテージを計算します (したがって、値 30 の場合、パーセンテージは (( 30 /120 ) * 100)= 25 である必要があり、このパーセンテージをcolor()関数に渡します。

  2. 次に、パーセンテージを以前に宣言されcolor()たメソッドに渡し、そのメソッドの戻り値を属性に設定しcolorます。

JSF2.0を使用しています。これはどのように達成できますか?

4

1 に答える 1

2

いくつかの方法があります。

  1. カスタム EL 関数を作成します

    <nameSpace:column color="#{f:color(row.percentage)}">
    
  2. 引数を使用してメソッドを呼び出す EL 2.2 機能を利用しますweb.xml(Weblogic 12c は Servlet 3.0 と互換性があるため、webapp-suppliedも Servlet 3.0 と互換性がある場合、これは機能するはずです)。

    <nameSpace:column color="#{bean.color(row.percentage)}">
    
  3. 必要なデータをモデルで直接準備します。

    <nameSpace:column color="#{row.color}">
    
  4. #{row}getter メソッドでEL 式をプログラムで評価します。

    <nameSpace:column color="#{bean.color}">
    

    Double percentage = context.getApplication().evaluateExpressionGet(context, "#{row.percentage}", Double.class);
    // ...
    
于 2013-04-03T15:11:45.507 に答える