我使用jasper而不使用xml(我必须更改它)但我有一个JasperDesign的实现,我使用...我用JRDesignExpression创建一个JRDesignTextField,
我想设置表达式,以便我可以使用jasper在一个带有整数参数的JRBeanCollectionDataSource中的每个元素上调用一个方法...目前我只能调用返回值并且不接受任何参数的方法。其表达式如下所示:
final JRDesignExpression exp = new JRDesignExpression(); exp.setValueClass(String.class); exp.setValueClassName(String.class.getName()); exp.addFieldChunk( “column0”);
答案 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;
}
/*...*/