Jasper Reports:如何使用JasperDesign类中的int参数调用java方法

时间:2010-10-08 18:56:42

标签: java jasper-reports

我使用jasper而不使用xml(我必须更改它)但我有一个JasperDesign的实现,我使用...我用JRDesignExpression创建一个JRDesignTextField,

我想设置表达式,以便我可以使用jasper在一个带有整数参数的JRBeanCollectionDataSource中的每个元素上调用一个方法...目前我只能调用返回值并且不接受任何参数的方法。其表达式如下所示:

final JRDesignExpression exp = new JRDesignExpression();   exp.setValueClass(String.class);   exp.setValueClassName(String.class.getName());   exp.addFieldChunk( “column0”);

3 个答案:

答案 0 :(得分:1)

您可以使用setText而不是自己添加块。 Jasper将解析文本,根据需要添加块 - 参数$ P {param},字段$ F {field},变量$ V {var}等。例如:

exp.setText( "$F{column0}.myMethod($V{someIntVar})" )

答案 1 :(得分:1)

您应该考虑使用JRBeanCollectionDataSource以外的其他数据源。 JRBeanCollectionDataSource为每个字段调用getter方法,这是您要避免的。

您可以使用JRMapCollectionDataSource,它是从一组地图中创建的。您可以根据需要调用地图的键,例如“column0”,“column1”(或简称为“0”,“1”等)

另一种选择是直接实现JRDataSource界面,您可以在其中实现getFieldValue(),无论您喜欢哪种方式。

答案 2 :(得分:0)

试试这个:

final DRIExpression<Boolean> hasZeroPvMeasure = boolExp("$F{" + PROP_THIS + "}.hasZeroPvMeasure($P{controllingModel})");
cols.add(flagCol(hasZeroPvMeasure, "0-PV"));

您的数据对象需要:

public static final String PROP_THIS = "this";

/**
 * Used in Jasper Expressions
 * @return
 */
public ControllingRowData getThis() {
    return this;
}

Jasper动态报告还有一个解释_THIS的实现,但是由于一个错误,它在验证过程中失败了......

JRAbstractBeanDataSource

public static final String CURRENT_BEAN_MAPPING = "_THIS";

JRAbstractBeanDataSource

protected static boolean isCurrentBeanMapping(String propertyName)
{
    return CURRENT_BEAN_MAPPING.equals(propertyName);
}

/*...*/
if (isCurrentBeanMapping(propertyName))
{
    value = bean;
}
/*...*/