2012-03-27 46 views
2

我想为我的域类实例创建一个报告,但不是全部,只是在GSP表中选择的用户(选中复选框)。在我的报告中,我也会有一些逻辑 - 很少的条件,一些计算等。我还需要从数据库中获得一些额外的数据。我该怎么做呢?我应该在cotroller中获取选中的复选框的值,并将它传递给jasper cotroller?事情是这样的:从Grails开始jasperReport/iReport

GSP:

<g:each in="${books}" var="bookInstance"> 
     <td> <g:checkBox name="book_${bookInstance.id}"/> </td> 
</g:each> 

操作:

def bookReport = { 
    def bookList = [] 
    params.each { 
     if(it.key.startsWith("book_")){ 
      bookList.add((it.key - "book_") as Long) 
     } 
    } 

    def bookCriteria = Book.createCriteria() 
    def books = bookCriteria.list { 
     'in'('id',bookList) 
    } 
    chain(controller:'jasper', data:books, action:'index', params:params) 
} 

我用iReport的创建报告。我试过创建没有SQL查询和参数的报告。我的逻辑是,如果我将域实例的映射传递给碧玉控制器,就像我在上面的例子中所做的那样,我不需要在报告中指定数据源。但我得到一个空的报告。

我也尝试将报表数据源设置到我的数据库并报告查询:select * from book where $ X {IN,id,books}。在这种情况下,无论我选择的报告是为所有书籍实例创建的。

回答

0

您是否尝试过...

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

...同时使SQL字符串中的.jrxml为空?