在 JasperReports 中,$F和 $P是两种不同的表达式类型,用于访问不同来源的数据:
$F{fieldName} - 字段(Field)
-
表示从数据源(如数据库查询结果、JavaBean 等)获取的每条记录的具体数据
-
通常对应数据集的列或对象的属性
-
在报表的 detail 区域中逐行显示
-
示例:
-- 如果查询是:SELECT name, age FROM users $F{name} -- 获取当前记录的 name 字段 $F{age} -- 获取当前记录的 age 字段
$P{parameterName} - 参数(Parameter)
-
表示报表运行时传入的外部参数
-
在报表执行前设置,整个报表执行期间保持不变
-
常用于:
-
筛选条件(如日期范围、部门等)
-
标题文字
-
配置选项
-
-
示例:
// Java 代码中传入参数 parameters.put("reportTitle", "销售报表"); parameters.put("startDate", new Date());报表中:
$P{reportTitle}
主要区别
| 特性 | $F (字段) | $P (参数) |
|---|---|---|
| 数据源 | 主数据集的记录 | 外部传入的值 |
| 变化性 | 每行都不同 | 整个报表固定 |
| 用途 | 显示详细数据 | 控制报表行为 |
| 设置时机 | 设计时定义字段 | 运行时传入值 |
| 生命周期 | 随记录变化 | 报表执行期间不变 |
使用示例
<!-- 报表标题使用参数 -->
<textField>
<textFieldExpression><![CDATA[$P{companyName} + " 销售报表"]]></textFieldExpression>
</textField>
<!-- 详细数据使用字段 -->
<detail>
<textField>
<textFieldExpression><![CDATA[$F{productName}]]></textFieldExpression>
</textField>
<textField>
<textFieldExpression><![CDATA[$F{quantity}]]></textFieldExpression>
</textField>
</detail>
常见场景
-
使用
$P传递用户输入的筛选条件 -
使用
$F显示查询结果的具体数据 -
结合使用:
$F{price} * $P{taxRate}
另外还有 $V{variableName}用于计算变量(如合计、平均值等),但这是另一个概念了。