2015-05-08 6 views
3

Я хочу создать приложение, которое может загрузить Excel и прочитать их. и создавать PDF, Excel и Word на лету. Я использую Grails 2.4.4. и Export v 1.6.Экспорт плагина на Grails 2.4.4

Вот мой код

class AuthUserController { 
    def exportService 
    def grailsApplication 
    .... 
    def list = { 
     if(!params.max) params.max = 10 

     if(params?.format && params.format != "html"){ 
      response.contentType = grailsApplication.config.grails.mime.types[params.format] 
      response.setHeader("Content-disposition", "attachment; filename=AuthUser.${params.extension}") 
      List fields = ["username", "email"] 
      Map labels = ["username": "username", "email": "email"] 

      /* Formatter closure in previous releases 
      def upperCase = { value -> 
       return value.toUpperCase() 
      } 
      */ 

      // Formatter closure 
      def upperCase = { domain, value -> 
       return value.toUpperCase() 
      } 

      Map formatters = [username: upperCase] 
      Map parameters = [username: "admin", "column.widths": [0.2, 0.3, 0.5]] 
      exportService.export(params.format, response.outputStream, response.outputStream,AuthUser.list(params), [:], fields, labels, formatters, parameters) 
     } 

     [ authUserInstanceList: AuthUser.list(params) ] 
    } 

и на модели

class AuthUser { 

    transient springSecurityService 

    String username 
    String password 
    String email 
    boolean enabled = true 
    boolean accountExpired 
    boolean accountLocked 
    boolean passwordExpired 

    static transients = ['springSecurityService'] 

    static hasMany = [madeBillings:Billing, goodsBillings:GoodsBill, approvedRequest:TenantRequest, journals:Journal] 

    static constraints = { 
     username blank: false, unique: true 
     password blank: false 
     email blank: false, unique: true, email: true 
    } 

    static mapping = { 
     password column: '`password`' 
     tablePerHierarchy false 
    } 

    Set<AuthRole> getAuthorities() { 
     AuthUserAuthRole.findAllByAuthUser(this).collect { it.authRole } 
    } 

    def beforeInsert() { 
     encodePassword() 
    } 

    def beforeUpdate() { 
     if (isDirty('password')) { 
      encodePassword() 
     } 
    } 

    protected void encodePassword() { 
     password = springSecurityService?.passwordEncoder ? springSecurityService.encodePassword(password) : password 
    } 

    String toString() { 
     username 
    } 
} 

я стараюсь использовать http://localhost:8080/myapp/authUser/list?format=csv&extension=csv

Я нашел решение из документации на официальном плагином странице

def list = { 
    if(!params.max) params.max = 10 

    if(params?.exportFormat && params.exportFormat != "html"){ //must change to exportFormat cause format is reserved for the default grails format 
     response.contentType = grailsApplication.config.grails.mime.types[params.exportFormat] 
     response.setHeader("Content-disposition", "attachment; filename=AuthUser.${params.extension}") 

     exportService.export(params.exportFormat, response.outputStream,AuthUser.list(params), [:], [:]) 
    } 

    // [ authUserInstanceList: AuthUser.list(params) ] you have to comment this or give an else clause since the response already called before 
} 

ответ

1

Вы можете использовать плагин экспорта Grails для экспорта данных в excel, csv, pdf и т. Д. Его легко настроить и использовать.

Вот ссылка: http://grails.org/plugin/export

+0

Я использовал, что плагины для моей работы, но, по 2.4.4, он просто сломан, я рассматриваю использовать Java POI для Excel или IText для PDF/слова, я Я сообщу, если мне удастся экспортировать грабли. –