text-expression中的if-else-if-else

时间:2011-01-13 07:17:50

标签: jasper-reports expression

我必须显示列:   - 发送   - 收到   - 已取消

在报告列中,通过检查DB中的值“状态”。因此,如果Status等于1,则发送,= 2接收,= 3取消。

jasper报告中的文本字段表达式(?a:b)只能采用一个条件,我如何给出多个条件?比如if-else阶梯?

5 个答案:

答案 0 :(得分:26)

您可以使用嵌套的三元语句来实现此目的,但这很麻烦。

例如:

(i == 1) ? "Send" : ((i == 2)? "Received" : "Cancelled");

答案 1 :(得分:7)

你可以使用replace()方法, 但是如果不是,你必须将你的字段的类更改为String, EX:

$F{f_phone_type}.replace("0","Phone/ATA").replace("1","Gateway").replace("2","SIPTrunk")

答案 2 :(得分:4)

使status字段成为从bean传递的参数。这样,您可以在bean中执行所需的任何处理,将结果分配给参数变量,并将其传递到报表中。

答案 3 :(得分:4)

我的首选方法是,当你有一大组子站或者它们可以改变时,用HashMap形式的替换创建一个参数。

您可以在运行时传递替换或设置默认值。好处是您可以更新地图而无需重新编译报告。

例如,如果您有一个名为“risk_types”的参数(使用默认语言为groovy),您可以将参数默认值设置为

[1: "HIGH RISK", 2: "LOW RISK"]

在您的代码中,您将文本字段表达为(其中risk_type是数据库中的查找字段):

$P{risk_types}.get($F{risk_type})

对于地图中缺少的项目,您将获得空值,我将文本字段表达式扩展为:

$P{risk_types}.get($F{risk_type}) ?: "UNDEFINED"

答案 4 :(得分:1)

Boolean.valueOf(!($P{accWise}.equals("AC" ) && $F{RQAC_ACCREJ}.equals("R")))对于在ireport属性中提供多个条件非常有用。