2010-01-18 6 views
0

J'ai besoin de tester si un fichier de ressources (une image, par exemple) existe et sinon, je vais afficher une autre image. Mon code de vue GSP ressemble:Comment vérifier l'existence d'un fichier de ressources au moment de l'exécution [grails]?

<% if (resExists(dir: "images", file:"img.jpg")) {%> 
    <img src="${g.resource(dir:'images',file: 'img.jpg')}"> 
<% else { %> 
    <img src="${g.resource(dir:'images',file: 'noimg.jpg')}"> 
<%}%> 

Comment puis-je tester une existence de fichier dans Grails? Quel est le code de la méthode boolean resExists()

Répondre

1

J'ai trouvé la réponse:

def resExists(resPath) { 
    def resFile = grailsApplication.parentContext.getResource(resPath) 
    resFile?.exists() 
} 

ou

def resExists(resPath) { 
    def resFile = request.servletContext.getResource(resPath) 
    resPath 
} 

Et vous l'appelez avec resExists('images/img.jpg')

+0

Bon travail. Vous pouvez essayer d'en faire un tag personnalisé pour votre application. Voir http://www.grails.org/doc/latest/guide/6.%20The%20Web%20Layer.html#6.2.2%20GSP%20Tags –

1

La réponse ci-dessus ne fonctionne pas moi lorsqu'il est utilisé à partir d'un plugin, emballé comme une guerre de production. Je l'utilise maintenant comme suit:

GrailsConventionGroovyPageLocator groovyPageLocator 

def resExists(resPath) { 
    def resource = groovyPageLocator.findTemplateByPath(resPath) 
    resource 
} 
1

Je l'ai fait ce qui suit dans GSP:

<g:set var="flag" value="${new File(grailsApplication.mainContext.servletContext.getRealPath("images/sgs-geosol/sign/${sec.username()}.gif")).exists()}"></g:set> 

<g:if test="${flag}"> 

</g:if> 

Le code ci-dessous RENDEMENTS le chemin réel de l'application Grails:

grailsApplication.mainContext.servletContext.getRealPath("") 
Questions connexes