jasper里面$F和$P的区别

在 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}用于计算变量(如合计、平均值等),但这是另一个概念了。

相关推荐
benchmark_cc27 分钟前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
const_qiu40 分钟前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 个人资料管理的更新接口实现与坑
java·开发语言·交友
团子哒哒1 小时前
数组、切片和Map
后端
专注仿真1 小时前
ThinkPHP6 API接口开发实例:从零搭建RESTful风格接口
后端·php·restful
开心猴爷1 小时前
应对iOS审核4.3:可以使用 IpaGuard 来给属性名混淆的技术细节与平衡之道
后端·ios
1m555555551 小时前
RAG 工程实战(五):正确知识已经进入 Prompt,为什么大模型还是会答错?
后端·面试
CoderYanger1 小时前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc
易小尊1 小时前
我的模型在 65% 以上时准得可怕,在 50% 时像在掷硬币
后端
用户2788607285671 小时前
fallback 会盖掉平台提示词:system、空数组和 systemAppend 的差别
前端·后端