1

I need to retrieve value parameter from JasperReports's report using JRParameter.

My source code:

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"));

How to retrieve value from Parameter "text", does any way to retrieve the values from parameter?

3
  • have you tried running this with the debugger and seen if it enters the if statement? Commented Sep 7, 2017 at 3:51
  • Yes its goes inside if statement , i'm using debugging the result , return mapping : net.sf.jasperreports.engine.base.JRBaseParameter@96a8e870 , how to convert that result to values string.. Commented Sep 7, 2017 at 4:07
  • If you want to evaluate parameter default value expressions, take a look at jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/… Commented Sep 7, 2017 at 11:11

1 Answer 1

2

The JasperReport object contains the array of report's parameters.

The JasperReport.getParameters() method returns all parameters: system (built-in) and the parameters of your report (defined at template).

You can not get the value of parameter because the is no any value at JasperReport object. It is just a compiled version of report's template. You can get the name, default expression, class of parameter, description, properties and so on.

Looks like you need to get default expressions of parameters.

The sample of working with parameters got from JasperReport object

I used the simple template:

<?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>

The report contains two parameters: of String and Integer types.

The Java code will be:

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
    }
}

The output will be:

Parameter name: stringParam, class: class java.lang.String, expression: "string value"
Parameter name: intParam, class: class java.lang.Integer, expression: 11
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.