Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find the physical path of a GSP file in a deployed grails application

Tags:

grails

I need to find out the physical path of a grails GSP file.

My requirement is that I want to create a new layout file at run-time and use that in the application.

I have been able to achieve this without problem when the application runs on jetty (grails run-app), however, when I deploy the app on Jboss, the path at which the file needs to be created changes.

So, ideally I would like to find out at runtime using some magical utility the path of a particular GSP (lets say main.gsp layout file) and I need to create my new layout in the same directory in which main.gsp reside.

Any pointers?

-Deepak

like image 786
Deepak Mittal Avatar asked Dec 17 '22 09:12

Deepak Mittal


2 Answers

Here is some groovy code to lookup the layout-folder path in the production environment (eg. when deployed as war on jboss):

import org.codehaus.groovy.grails.commons.ApplicationHolder

...

File layoutFolder = ApplicationHolder.application.parentContext.getResource("WEB-INF/grails-app/views/layouts").file      
def absolutePath = layoutFolder.absolutePath
println "Absolute Path to Layout Folder: ${absolutePath}"
File newLayoutFile = new File(layoutFolder, "foo.gsp")

To use the newly created layout, you probably will need to restart the web-application or the container, since the views are chached in production mode.

like image 73
Siegfried Puchbauer Avatar answered May 22 '23 22:05

Siegfried Puchbauer


There's a definitive way...

grailsApplication.parentContext.getResource("WEB-INF/grails-app/views/path/to/my.gsp").file.toString()

Out of controllers (ex. bootstrap)? Just inject..

def grailsApplication

Best regards!

like image 45
Wanderson Santos Avatar answered May 22 '23 21:05

Wanderson Santos