在Grails中放置xsl文件的位置,以及如何获取路径

时间:2013-08-15 02:57:07

标签: grails groovy

我需要在服务上传递我的xsl和read文件以生成pdf。我总是得到像

这样的错误

文档为空(XSLT样式表可能出错).Stacktrace如下: 消息:文档为空(XSLT样式表可能出错)。

我还在bean resource.xml或resource.groovy

上自动发送文件
class MyClassHolder{
   Resource template
}

//in my controller

class MyController{
   method(){
   File resource = classHolder.template.file
   def reader = new FileReader(resource)
   myservice.convert(reader)
    }
}

2 个答案:

答案 0 :(得分:1)

每当我需要放置一些文件并从该文件中读取内容时,我就会创建一个目录,例如resources目录中的web-app,并在服务中阅读内容,如:

import org.codehaus.groovy.grails.web.context.ServletContextHolder as SCH

class MyService {
    def readFile() {
        def servletContext = SCH.servletContext
        def file = servletContext.getResource('/resources/example.xsl').getContent()
        println "Content = ${file}"
    }
}

答案 1 :(得分:0)

如果您将其放在web-app文件夹中,并且您使用的是Grails 2,则可以使用Grails资源定位器。

class MyService {
    def grailsResourceLocator
    def templateResource

    @PostConstruct
    init() {
        templateResource = grailsResourceLocator.findResourceForURI('/resources/example.xsl')
    }
    def convert() {
        // no need to pass in resource or filereader, can use file or inputStream
        def templateFile = templateResource.file
        def templateStream = templateResource.inputStream
    }
}
class MyController {
    MyService myService

    method() {
        myService.convert()
    }
}

方便提示:在Spock中模拟这个,使用GroovyPageStaticResourceLoader

@TestFor(MyService)
class MyServiceSpec extends Specification {
    def setup() {
        service.grailsResourceLocator = Mock(GroovyPageStaticResourceLocator)
    }
}