Как мне заставить плагин Grails Export корректно работать с критериями запросов? - PullRequest
5 голосов
/ 11 января 2011

Я пытаюсь получить запрос Criteria для экспорта в CSV, Excel, что у вас.Проблема, с которой я сталкиваюсь, заключается в том, что код категорий работает чисто (как, например, не выдает никаких ошибок), но он не генерирует никаких данных.Я точно знаю, что data это ArrayList из List.У кого-нибудь есть обходной путь для этого, или скажите мне, если я делаю что-то не так?

Вот мой объект домена:

class Machine {
    String name,
           category
    // constraints, etc
}

Вот мое действие контроллера (взятое в основном из страница плагина ):

def categories = {
    if(params?.format && params.format != "html"){
 response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]
 response.setHeader("Content-disposition", "attachment; filename=categories.${params.extension}")

    def data = Machine.createCriteria().list {
        projections {
            groupProperty("category")
            countDistinct("id")
        }
    }

    exportService.export(params.format, response.outputStream, data, [:], [:])
}

1 Ответ

3 голосов
/ 11 января 2011

Вот одно из возможных решений, о котором я подумал, как только я задал вопрос: Expando. Вот изменения в методе контроллера:

// response stuff above
def fields = ["category", "count"]
def labels = ["category": "Category", "count": "# of machines" ]

def data = Machine.createCriteria().list {
    projections {
        groupProperty("category")
        countDistinct("id")
    }
}.collect { l -> new Expando("category": l[0], "count": l[1]) }

exportService.export(params.format, response.outputStream, data, fields, labels, [:], [:])

Я использую тот факт, что плагин экспорта пытается получить значение из объекта. Итак, я даю ему объект.

Если есть лучшее решение, я буду очень рад его увидеть.

...