IReport – Variable – String[] – Initial Value Expression

expressionireportjasper-reportsvariables

I discovered today in iReport that I cannot set the initial value expression of a String[] using normally valid Java syntax, such as:

private String[] fruitNames = new String[] {"Apple", "Banana"};

Extrapolating this into an iReport variable would be something as simple as this (I would think):

Name: fruitNames

VariableClass: java.lang.String[]

Calculation: Nothing

Reset Type: Report

IncrementType: None

Initial Value Expression: new String[]{"Apple", "Banana"}

Compiling my report template I get an error:

Compilation exceptions: com.jaspersoft.ireport.designer.compiler.ErrorsCollector@683896bd >net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions c>lass file: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: >calculator_Fruits_1326149102402_537017: 281: unexpected token: Apple @ line 281, column 55. >1 error

In the code editor for setting the initial value I notice that the parser underlines, in red, the curly braces {}. This makes sense because iReport interprets these braces as param, field, or variable identifiers. So I see where the conflict can exist, but does anyone know the proper syntax to use for initializing String[] in the Initial Value Expression field?

Note: I got around the issue by just setting the value in a Scriptlet, but I'm really curious to know the proper syntax, if it exists.

Best Answer

You should be able to get what you need by setting your variable class to java.util.Collection. Then set the initial value like this:

java.util.Arrays.asList( "Apple", "Banana" )

Also, your error indicates that your report language is set to Groovy. That's fine if it's intentional, but perhaps it's accidental. I find things are simplified by changing the report language to Java.

I don't normally set the variable class to an array like that. I set it to java.util.Collection as mentioned above. But I don't know if there is any important difference.