使用JasperReports API设置表达式的正确方法是什么?

时间:2016-05-09 07:03:48

标签: java jasper-reports

我正在使用文本字段来显示列名。为了显示列的相应名称,我尝试了以下方法:

方法1:

textField.setX(currentXPos);
textField.setY(0);
textField.setWidth(columnWidth);
textField.setPrintWhenDetailOverflows(false);
textField.setHeight(colDtlBandHeight);
textField.setStretchWithOverflow(true);
textField.setStretchType(StretchTypeEnum.RELATIVE_TO_BAND_HEIGHT);
textField.setStyle(normalFont);
textField.setBlankWhenNull(true);
JRDesignExpression  expression = new JRDesignExpression();
expression.setValueClass(columnClass);
expression.setText("$F{" + columnName + "}"); 

但是在使用上述方法时,它会抛出一个例外:

net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file: 
1. Syntax error on token "ID", delete this token
   value = SHIFT ID; //$JR_EXPR_ID=44$
2. Syntax error, insert ";" to complete BlockStatements
   value = BILL NO.; //$JR_EXPR_ID=45$
3. Syntax error on token ".", invalid VariableDeclarator
   value = BILL NO.; //$JR_EXPR_ID=45$
4. Syntax error on token "DATE", delete this token
   value = BILL DATE; //$JR_EXPR_ID=46$ 

但是在使用以下行时,列名称设置正确。

方法2:

textField.setExpression(new JRDesignExpression("new String(\""+colTitle+"\")"));

我的怀疑是:
1.为了显示数据,使用了第一种方法。那么在那种情况下怎么没有例外呢?
2.当使用相同的方法显示列名时,为什么会抛出这些异常?
3.第二种方法是如何工作的?

1 个答案:

答案 0 :(得分:0)

1。:

我认为数据正确用引号括起来。

<强> 2:

根据例外说明(例如Syntax error on token "ID", delete this token)判断,口译员会看到两个值,SHIFTID。这里似乎缺少引号,例如。

"SHIFT ID"
"BILL NO."

第3:

在第一个示例中,您创建 JRDesignExpression ,设置值类并设置文本。

该字段不包含在引号中,如下面的示例所示。它应该是这样的:

expression.setText("\"$F{" + columnName + "}\"");

另外,您没有将表达式分配给textField:

textField.setExpression(expression)