如何使用 Java 获取 JasperReports 参数(JRParameter 对象)的值?

How to get value of JasperReports parameter (JRParameter object) using Java?

我需要使用 JRParameter.

JasperReports 的报告中检索值参数

我的源代码:

JRParameter[] params = jasperReport.getParameters();
Map<String, JRParameter> jrParameters = new HashMap<String, JRParameter>();

for(JRParameter param : params) {
    if(!param.isSystemDefined() && param.isForPrompting()){
        System.out.println(" param name : " + param.getName());

        // test is the name parameter in jasper report
        if (param.getName().trim().equals("text")) {
            param.getDefaultValueExpression();
            jrParameters.put(param.getName(), param);
        }
    }
}
// the output not coming out.
System.out.println(" return mapping : " + jrParameters.get("text"));

如何从参数 "text" 中检索值,有什么方法可以从参数中检索值?

JasperReport 对象包含报表参数数组。

JasperReport.getParameters()方法returns所有参数:系统(内置)和报表参数(在模板中定义)。

您无法获取参数值,因为JasperReport对象没有任何值。它只是报告模板的编译版本。可以获取参数的名称、默认表达式、class、描述、属性等。

看来您需要获取参数的默认表达式。

使用从 JasperReport object

获取的参数的示例

我使用了简单的模板:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Test parameters" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <parameter name="stringParam" class="java.lang.String">
        <defaultValueExpression><![CDATA["string value"]]></defaultValueExpression>
    </parameter>
    <parameter name="intParam" class="java.lang.Integer">
        <defaultValueExpression><![CDATA[11]]></defaultValueExpression>
    </parameter>
    <title>
        <band height="30">
            <staticText>
                <reportElement x="0" y="0" width="100" height="30"/>
                <text><![CDATA[Title]]></text>
            </staticText>
        </band>
    </title>
</jasperReport>

报告包含两个参数:StringInteger 类型。

Java代码将是:

JasperReport jasperReport;

try (InputStream inputStream = JRLoader.getResourceInputStream("report.jrxml")) {
    jasperReport = JasperCompileManager.compileReport(JRXmlLoader.load(inputStream));
}

List<String> paramsNames = Arrays.asList("stringParam", "intParam"); // we are going to show information about only this parameters

JRParameter[] parameters = jasperReport.getParameters();
for (JRParameter parameter : Arrays.stream(parameters).filter(param -> paramsNames.contains(param.getName())).collect(Collectors.toList())) {
    JRExpression expression = parameter.getDefaultValueExpression();
    if (expression != null) {
        System.out.println(String.format("Parameter name: %s, class: %s, expression: %s", parameter.getName(), parameter.getValueClass().toString(), expression.getText())); // we are showing name, class and default expression of parameter
    }
}

输出将是:

Parameter name: stringParam, class: class java.lang.String, expression: "string value"
Parameter name: intParam, class: class java.lang.Integer, expression: 11