如何在EL中调用带参数的助手方法



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

<>之前值1207030.60 之前

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

所以对于百分比到颜色的转换,我可以使用这里给出的简单算法。虽然它是用JavaScript编写的,但也可以很容易地用Java编写。我们将此方法称为color(),并让它在具有原始List(值)的受管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。如何才能做到这一点?

有几种方法。

  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. 在getter方法中以编程方式计算EL表达式#{row}

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

    Double percentage = context.getApplication().evaluateExpressionGet(context, "#{row.percentage}", Double.class);
    // ...
    

相关内容

  • 没有找到相关文章

最新更新