1

我目前正在研究 grails 导出插件。如果我只做简单的 list(),插件就可以工作。但是如果我将它与命名查询相关联,它就不再起作用了。这是代码的一部分。:

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

    exportService.export(params.format, response.outputStream,Building.selectStatus(params.q).list(params), [:], [:])
  }
}

上面的代码不起作用。它抛出此错误:无法在空对象上调用方法 getSuperclass()。Stacktrace 如下:消息:无法在空对象上调用方法 getSuperclass()

任何人都可以帮忙吗?谢谢。

更新:我的 list.gsp 中有这个:

    <g:form action="list" controller="building">
    <g:select id="user" name="q" from="${myapp.Construction.list()}" optionKey="id" required="" value="${constructionId?.id}" class="many-to-one" />
    <g:submitButton name="Execute"/>
    </g:form>

如果我提交该表单,它将列出或显示具有相同建筑 ID 的建筑物。该代码的某处是:

    <export:formats
formats="['csv', 'excel', 'ods', 'pdf', 'rtf', 'xml']" action="buildReport"/>

该代码将调用 buildReport。但不幸的是调用buildReport时select的q或params.q为null。

顺便说一句,所有这些代码都在一个 gsp 文件中,并且在提交表单时会显示相同的 gsp。


好吧,我想我知道为什么它不起作用了。这是因为 params.q 的

    Building.selectStatus(params.q)

实际上是空的!我不知道为什么它为空。我的 list.gsp 中有这个来传递参数:

    <g:textField name="q" value="${params.q ?: ''}" />

那么 gsp 中应该包含什么来传递参数?因为在这里,我才发现它是空的。

顺便说一句,在调用 buildReport 之前,文本字段有一个用户将输入的值。

4

0 回答 0