我必须显示列: - 发送 - 收到 - 已取消
在报告列中,通过检查DB中的值“状态”。因此,如果Status等于1,则发送,= 2接收,= 3取消。
jasper报告中的文本字段表达式(?a:b)只能采用一个条件,我如何给出多个条件?比如if-else阶梯?
答案 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属性中提供多个条件非常有用。