【发布时间】:2013-03-25 06:47:51
【问题描述】:
我有一个托管 bean 中的值列表。
价值观 120 70 30 60但是要求是将这些值映射到红色(0%
) 和绿色 (100%)。我需要将此转换后的颜色值提供给具有 color 属性的数据驱动组件的列(类似于h:dataTable),该属性可以是 EL(表达式语言)表达式。
所以对于百分比到颜色的转换,我可以使用给定的简单算法 here 。尽管它是用 JavaScript 编写的,但它可以很容易地用 Java 编写。让我们调用此方法color() 并让它在具有原始 List(values) 的托管 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。如何实现?
【问题讨论】:
-
您不能应用
color算法来处理列表中的给定值,然后再通过getValuesbean 方法返回它们吗?恕我直言,您不应该将这种预处理留给 EL 函数,而是留给 bean,如果可能的话,bean 可以返回一个现成的列表。 -
JSP 在 JSF2 中已被弃用,并由 Facelets 继承。确认一下,您是真的使用 JSP 还是将“JSP/EL”粗心地混为“一回事”?如果您真的在使用 JSP,您需要一种与 elias 评论中问题的答案中建议的方法不同的方法来注册自定义 EL 函数。另一种选择是利用新的 EL 2.2 特性,即使用参数调用方法。但为此,我们需要知道目标容器的品牌/版本。
-
@BalusC 我确实在使用 Facelets。对困惑感到抱歉。我已经删除了 JSP 标记。目标容器是 WebLogic Server 12c (12.1.1)