You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iReports 2.0.5中Frame边框的Print When表达式不生效问题求助

问题分析与解决方案

看起来你在JasperReports里控制Frame边框打印时踩了个小坑——你的Print When表达式逻辑写反啦!

问题出在哪?

你当前用的表达式是:

new Boolean("PO".indexOf($F{type}) > -1)

这个代码的意思是在固定字符串"PO"里查找$F{type}的内容,只有当$F{type}是"P"、"O"或者"PO"时才会返回true,完全和你要的“判断$F{type}是否以PO开头”逻辑相反,这就是为什么边框总是显示的原因。

正确的表达式写法

根据你的需求,有两种更合适的写法:

  1. 用startsWith方法(最直观推荐)
    直接判断字段是否以指定前缀开头,逻辑清晰不易出错:

    new Boolean($F{type}.startsWith("PO"))
    
  2. 用indexOf方法修正参数顺序
    如果你习惯用indexOf,要把字段放在前面,检查返回值是否为0(表示从第一个字符就匹配):

    new Boolean($F{type}.indexOf("PO") == 0)
    

额外注意:处理字段为空的情况

如果$F{type}可能为null,为了避免空指针异常,建议加上非空判断:

new Boolean($F{type} != null && $F{type}.startsWith("PO"))

把上面的表达式替换到你的Print When里,就能实现只有当type字段以"PO"开头时才打印边框的需求啦!

内容的提问来源于stack exchange,提问作者PSDockery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:43:05