如何使用 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>
报告包含两个参数:String 和 Integer 类型。
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
我需要使用 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>
报告包含两个参数:String 和 Integer 类型。
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