Grails - 从战争中跑出来时位于不同路径的图像

时间:2014-07-28 20:56:29

标签: grails vaadin war

我一直在开发一个Grails应用程序,它使用位于此目录中的一些FileResource:

MyGrailsApplication \ web应用\图像

我可以通过GrailsResourceUtils.WEB_APP_DIR自然地通过grails获取此目录。但是,当我将我的Grails项目转换为.war文件并将其部署到tomcat服务器时,该代码不起作用 - 路径搞砸了。

通过一些调试语句,我能够找到一个hacky解决方法(基本上,在我发动战争之前进行代码修改):

// BELOW 2 LINES WORK IN THE WAR FILE, BUT NOT WITH THE RUN-APP CMD
new FileResource(new File("../webapps/InstanceChecker-0.1/images/ok.png"))
new FileResource(new File("../webapps/InstanceChecker-0.1/images/http404.png"))

// BELOW 2 LINES WORK WITH RUN-APP, BUT NOT IN THE WAR
new FileResource(new File(GrailsResourceUtils.WEB_APP_DIR + "/images/ok.png"))
new FileResource(new File(GrailsResourceUtils.WEB_APP_DIR + "/images/http404.png"))     

有没有办法在run-app中以及在部署为.war时干净地获取图像路径?是否有一些我在这里错过的最佳实践?

编辑:也许我不是把图像放在理想的目录中?我也愿意接受这方面的建议。

2 个答案:

答案 0 :(得分:1)

要获取资源文件,您可以使用:

   def basePath = grailsApplication.mainContext.servletContext.getRealPath('images')

检查是否以“/”结尾:

basePath = basePath.endsWith("/") ? basePath : basePath + "/"

然后:

new FileResource(new File(basePath+"fileName"))

请记住在控制器/服务中注入grailsApplication

答案 1 :(得分:0)

你也可以(也)使用grail的linkGenerator,如

final headerImage = new Image(null, new ExternalResource(Grails.get(LinkGenerator).resource(dir: "images", file: "logo.png")))