是否可以将Groovy Expandos集合绑定到jasper报告?

时间:2011-07-05 08:45:33

标签: grails groovy jasper-reports

我在我的应用程序中使用Grails Jasper报告插件。我试图将Expandos的集合绑定到我的报告模板。

我的Expando构建如下

def calendarTask = new Expando() 
calendarTask.title = task.name 
calendarTask.date = new Date() 
data.add(calendarTask)

然后我在我的控制器中绑定该集合

chain(controller:'jasper', action:'index', model:[data:data], params:params)

在我的报告中,我的报告模板中定义了一个名为“title”(字符串)的字段。当我尝试运行此报告时,我得到以下例外。你能将Groovy Expando集合绑定到jasper报告吗?

  

java.lang.NoSuchMethodException:   课堂上的未知财产'头衔'   'class groovy.util.Expando'

     

在   org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1313)

     

在   org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762)

     

在   org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)

1 个答案:

答案 0 :(得分:2)

我写了一个快速测试脚本,它给出了同样的错误

@Grapes(
    @Grab(group='commons-beanutils', module='commons-beanutils', version='1.8.3')
)
import org.apache.commons.beanutils.PropertyUtilsBean

def calendarTask = new Expando() 
calendarTask.title = { -> 'tim' }
calendarTask.date = { -> new Date() }

println new PropertyUtilsBean().getProperty( calendarTask, 'title' )

所以看起来common-beanutilsExpando在一起玩得不好......

但是,如果您从使用Expando更改为仅使用普通Map,则beanutils调用可以正常工作,那么您是否可以尝试将代码更改为:

def calendarTask = [
  title : task.name,
  date  : new Date(),
]
data.add(calendarTask)