Можно ли связать коллекцию Groovy Expandos с отчетом о яшме? - PullRequest
2 голосов
/ 05 июля 2011

Я использую плагин отчета 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 с отчетами о яшме?

java.lang.NoSuchMethodException: Неизвестное свойство 'title' в классе '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 Ответ

2 голосов
/ 05 июля 2011

Я написал скрипт быстрого теста, и он выдал ту же ошибку

@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-beanutils и Expando не очень хорошо играют вместе ...

Однако, если вы перейдете от использования Expando к простому Map, вызов beanutils сработает, поэтому вы можете попробовать изменить код на:

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