Я хочу знать программно, если представление или расположение существуют в чашах Грааля.
Я думаю в, получают absolutepath и просят File.exists, но я не знаю, как получить этот путь для каждой среды.
Я попробовал groovyPagesTemplateEngine.getUriWithinGrailsViews('a-view.gsp')
без успеха.
Можно ли дать мне какую-либо подсказку?
заранее спасибо
Я вижу 2 возможности
Если вы создадите военный файл, вы увидите, что представления хранятся в WEB-INF / grails-app / views . Вы можете поискать этот ресурс.
def uri = this.getClass().getResource("/grails-app/views/...").toURI()
if(new File(uri).exists()){...}
Найдите вдохновение в методе assertView GrailsUrlMappingsTestCase.
def patternResolver = new PathMatchingResourcePatternResolver()
def pathPattern = "grails-app/views/" + ((controller) ? "$controller/" : "") + "${view}.*"
if (!patternResolver.getResources(pathPattern)) {...}
В дополнение к сказанному Амрой вы также можете использовать grailsAttributes
(см. Документацию по GrailsApplicationAttributes ) . Быстрый пример:
private templateExists(String name) {
def template = grailsAttributes.getTemplateUri(name, request)
def resource = grailsAttributes.pagesTemplateEngine
.getResourceForUri(template)
return resource && resource.file && resource.exists()
}
Этот пример, конечно, предназначен для шаблонов, но, как вы можете видеть из документации, аналогичный метод существует и для представлений.