我有一个托管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}" -->
所以这个表达式语言应该能够:
首先计算百分比(所以对于值30,百分比应该是((30/120)* 100)= 25),然后将这个百分比传递给
color()
函数然后继续将百分比传递给先前声明的
color()
方法,然后将该方法的返回值设置为color
属性。
我使用的是JSF2.0。如何才能做到这一点?
有几种方法。
-
创建自定义EL函数
<nameSpace:column color="#{f:color(row.percentage)}">
-
利用EL 2.2带参数调用方法的特性(Weblogic 12c是Servlet 3.0兼容的,所以如果webapp提供的
web.xml
也兼容Servlet 3.0,那么这应该可以工作)。<nameSpace:column color="#{bean.color(row.percentage)}">
-
直接在模型中准备所需数据
<nameSpace:column color="#{row.color}">
-
在getter方法中以编程方式计算EL表达式
#{row}
。<nameSpace:column color="#{bean.color}">
Double percentage = context.getApplication().evaluateExpressionGet(context, "#{row.percentage}", Double.class); // ...