我在托管bean中有一个值列表。
Values 120 70 30 60
然而,要求是将这些值映射到红色之间的颜色(0%
)和绿色(100%)。我需要将此转换后的颜色值提供给数据驱动组件的列(类似于h:dataTable
),该组件具有 color 属性,该属性可以是EL(表达式语言)表达式。< / p>
因此,对于颜色转换的百分比,我可以使用给定here的简单算法。虽然它是在JavaScript中,但它可以很容易地用Java编写。让我们调用这个方法color()
并让它在具有原始List(值)的托管bean中声明。
Color color(double percentage){}
现在我的问题是如何首先将百分比传递给此方法,然后在运行时将转换后的Color值传递回组件。
例如
<nameSpace:dataTable values="#{bean.Values} var="row" ...>
<nameSpace:column color="#{expression language syntax}" -->
所以这种表达语言应该能够:
首先计算百分比(因此对于值30,百分比应为((30/120)* 100)= 25,然后将此百分比传递给color()
函数。
然后继续将百分比传递给先前声明的color()
方法,然后将该方法的返回值设置为color
attrbute。
我正在使用JSF2.0。如何实现这一目标?
答案 0 :(得分:2)
有几种方法。
<nameSpace:column color="#{f:color(row.percentage)}">
Utilize EL 2.2 feature of invoking methods with arguments(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);
// ...