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

我的Expando的构建如下

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

然后将集合绑定(bind)到我的 Controller 中
chain(controller:'jasper', action:'index', model:[data:data], params:params)

在我的报告中,我的报告模板中定义了一个名为“title”(类型字符串)的字段。当我尝试运行此报告时,出现以下异常。您可以将Groovy Expando集合绑定(bind)到jasper报告吗?

最佳答案

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

@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)

07-24 09:17