使用简单的CustomExpression时遇到麻烦

时间:2015-06-09 15:40:10

标签: dynamic-jasper

我看到很多使用CustomExpression的例子但由于某些原因它对我不起作用。我使用的是Java 7,Dynamic Jasper 5.0.2,Jasper Reports 5.5.0。 在这个简单的表达式中,我只是想返回字符串" foo"。似乎评估永远不会被调用所以所有行显示为空白而不是" foo"。 " foo"示例仅用于测试目的,但我的最终自定义表达式将是:一个作为2个字段的串联,另一个将是使用是/否替换布尔值1/0。



AbstractColumn columnField = ColumnBuilder.getNew()
                            .setCustomExpression(getMyCustomExpression())
                            .setTitle(bundle.getString(fld.getFieldNameDesc())).setWidth(Integer.parseInt(JR_DYNAMIC_DEFAULT_COLUMN_WIDTH))
                            .setPattern(FieldTypeNameConvertor.getPatternByOracleType(fld.getFieldType()))
                            .setStyle(getStyle(fld.getFieldType()))
                            .build();
                            
drb.addColumn(columnField);         

...

private CustomExpression getMyCustomExpression() {
    return new CustomExpression() {           
        
    public Object evaluate(Map fields, Map variables, Map parameters) {
        final String myString = "foo";
        return myString;
    }

    public String getClassName() {
        return String.class.getName();
    }

    };
}
 




如果我创建一个列并设置格式,我也会得到空白:



Format textFormatter = new Format(){

                    public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) {
                	    if (obj == null || Boolean.FALSE.equals(obj))
                            toAppendTo.append("No");
                        else
                		    toAppendTo.append("Yes");
                	    return toAppendTo;
                    }
                    public Object parseObject(String source, ParsePosition pos) {
                		return null;
                    }
                };


....
columnField = ColumnBuilder.getNew()                           
                            .setColumnProperty(fld.getFieldNameKey(), getJavaType(fld.getFieldType()))
                            .setTextFormatter(textFormatter)
                            .setTitle(bundle.getString(fld.getFieldNameDesc())).setWidth(Integer.parseInt(JR_DYNAMIC_DEFAULT_COLUMN_WIDTH))
                            .setPattern(FieldTypeNameConvertor.getPatternByOracleType(fld.getFieldType()))
                            .setStyle(getStyle(fld.getFieldType()))
                            .build();




1 个答案:

答案 0 :(得分:0)

在逐步执行DJ API并修改传递给DynamicJasperHelper.generateJasperReport方法的参数后问题得到解决。 在我的项目中,我尝试使用Jasper API将动态jasper代码集成到现有的报告框架构建中,并覆盖了一些参数。不得不对现有代码如何处理参数,语言环境,资源包与DynamicJasper所期望的内容进行一些更改(最后在调用generateJasperReport之前将资源和语言环境设置为DynamicReport dr):

dr.setResourceBundle(fooResourceBundleName);
dr.setReportLocale(fooLocale);