0

我有一个托管 bean 中的值列表。

价值观

120
70
30
60

然而,要求是将这些值映射到红色(0%)和绿色(100%)之间的颜色。我需要将此转换后的颜色值提供给具有可以是 EL(表达式语言)表达式的颜色属性的数据驱动组件(类似于 a h:dataTable)的列。

所以对于颜色转换的百分比,我可以使用这里给出的简单算法。尽管它是用 JavaScript 编写的,但它可以很容易地用 Java 编写。让我们调用这个方法color()并让它在具有原始 List(values) 的托管 bean 中声明。

 Color  color(double percentage){}

现在我的问题是如何首先将百分比传递给此方法,然后在运行时将转换后的颜色值传递回组件。

例如

<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 调用带参数的方法的特性(Weblogic 12c 与 Servlet 3.0 兼容,因此只要 webapp 提供web.xml的也与 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 回答