2010-11-24 4 views
4

Où est le servletContext disponible dans une application Grails? J'ai essayé d'accéder au Config.groovy mais cela n'a pas fonctionné. L'accès dans une vue est également impossible.Où est le servletContext disponible dans Grails?

Je souhaite définir le répertoire temporaire comme répertoire pour stocker les fichiers importés dans mon environnement de développement et de test avec storage = (File)servletContext["javax.servlet.context.tempdir"].

Suivant les conseils de Burt j'ai essayé les éléments suivants dans le fichier conf/Config.groovy:

environments { 
    production { 
     grails.serverURL = "http://demo.com" 
    } 
    development { 
     grails.serverURL = "http://localhost:8080/${appName}" 
     storageDir = org.codehaus.groovy.grails.web.context.ServletContextHolder 
      .getServletContext()["javax.servlet.context.tempdir"] 
    } 
    test { 
     grails.serverURL = "http://localhost:8080/${appName}" 
    } 

} 

... mais je reçois cette erreur:

java.lang.NullPointerException: Cannot get property 'javax.servlet.context.tempd 
ir' on null object 
     at Config$_run_closure1_closure4.doCall(Config.groovy:59) 
     at Config$_run_closure1_closure4.doCall(Config.groovy) 
     at Config$_run_closure1.doCall(Config.groovy:57) 
     at Config$_run_closure1.doCall(Config.groovy) 
     at Config.run(Config.groovy:53) 
     at _GrailsPackage_groovy$_run_closure1.doCall(_GrailsPackage_groovy:52) 
     at _GrailsPackage_groovy$_run_closure2_closure10.doCall(_GrailsPackage_g 
roovy:93) 
     at _GrailsPackage_groovy$_run_closure2_closure10.doCall(_GrailsPackage_g 
roovy) 
     at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:2 
80) 
     at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy) 
     at _GrailsPackage_groovy$_run_closure2.doCall(_GrailsPackage_groovy:92) 
     at RunApp$_run_closure1.doCall(RunApp.groovy:28) 
     at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381) 
     at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415) 
     at gant.Gant$_dispatch_closure7.doCall(Gant.groovy) 
     at gant.Gant.withBuildListeners(Gant.groovy:427) 
     at gant.Gant.this$2$withBuildListeners(Gant.groovy) 
     at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source) 
     at gant.Gant.dispatch(Gant.groovy:415) 
     at gant.Gant.this$2$dispatch(Gant.groovy) 
     at gant.Gant.invokeMethod(Gant.groovy) 
     at gant.Gant.executeTargets(Gant.groovy:590) 
     at gant.Gant.executeTargets(Gant.groovy:589) 
Failed to compile configuration file: Cannot get property 'javax.servlet.context 
.tempdir' on null object 

Répondre

1

Vous pouvez y accéder de tout controleur. Vous pouvez peut-être y accéder depuis bootstrap.groovy mais j'en doute. Pour un exemple d'accès à partir d'un contrôleur, voir http://www.grails.org/doc/latest/ref/Controllers/servletContext.html

+0

Un contrôleur est beaucoup trop en retard si vous en avez besoin plus tôt, comme dans Config, ou, dans mon cas, dans resource.groovy. – mcv

2

Vous pouvez utiliser org.codehaus.groovy.grails.web.context.ServletContextHolder.getServletContext() si vous êtes dans un code qui n'y a pas encore accès.

+0

Je l'ai essayé, mais ça ne marche pas. Voir l'exemple ci-dessus. – deamon

+0

J'ai le même problème. J'en ai besoin dans resource.groovy, mais ServletContextHolder.getServletContext() renvoie null. grailsApplication.mainContext.servletContext ne fonctionne pas non plus, car mainContext n'existe pas encore. – mcv

Questions connexes