【问题标题】:if-else-if-else in textfield expression [duplicate]文本字段表达式中的 if-else-if-else [重复]
【发布时间】:2011-01-13 07:17:49
【问题描述】:

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

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

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

【问题讨论】:

    标签: jasper-reports expression


    【解决方案1】:

    您可以使用嵌套的三元语句来实现这一点,但它很混乱。

    例如:

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

    【讨论】:

    • 我也这样做了几次,最多三个条件都可以……但是如果你写了5个或更多条件谁会解码呢?
    • 谢谢,我也这样做了.. 但就像@davorp 说的那样.. 3 是最大的。
    • 这个答案肯定会产生代码气味。 @Sean 是对的:在您的 bean 中执行任何逻辑,将结果传递给报告。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      使状态字段成为从您的 bean 传递的参数。这样您就可以在 bean 中进行任何您需要的处理,将结果分配给参数变量,然后将其传递到您的报告中。

      【讨论】:

      • 谢谢.. 在 bean 中设置可能是一个可行的解决方案,而不是在报告本身中给出表达式。
      【解决方案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"
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2023-04-09
          • 2019-09-04
          • 1970-01-01
          • 2014-08-08
          • 1970-01-01
          • 1970-01-01
          • 2014-08-25
          • 2012-10-26
          • 2012-02-18
          相关资源
          最近更新 更多