Как программно узнать, существует ли в Grails вид или файл макета - PullRequest
6 голосов
/ 03 августа 2010

Я хочу узнать программно, существует ли представление или макет в граалях.

Я думаю получить абсолютный путь и запросить File.exists, но я не знаю, как получить этот путь для каждогоОкружающая среда.

Я пытался groovyPagesTemplateEngine.getUriWithinGrailsViews('a-view.gsp') безуспешно.

Можете ли вы дать мне какой-нибудь указатель?

заранее спасибо

Ответы [ 3 ]

16 голосов
/ 27 августа 2012

Начиная с Grails 2.0, вы можете добавить GrailsConventionGroovyPageLocator :

GrailsConventionGroovyPageLocator groovyPageLocator

и вызвать

groovyPageLocator.findViewByPath(...)
groovyPageLocator.findTemplateByPath(...)

, чтобы проверить, существуют ли представления или шаблоны.

4 голосов
/ 03 августа 2010

В дополнение к тому, что сказал amra, вы также можете использовать grailsAttributes (см. Документы для GrailsApplicationAttributes ) .Быстрый пример:

private templateExists(String name) {
    def template = grailsAttributes.getTemplateUri(name, request)
    def resource = grailsAttributes.pagesTemplateEngine
                                   .getResourceForUri(template)
    return resource && resource.file && resource.exists()
}

Этот пример, конечно, для шаблонов, но, как видно из документов, аналогичный метод существует и для представлений.

3 голосов
/ 03 августа 2010

Я вижу 2 варианта

Поиск файла вида

Если вы создадите файл войны, вы увидите, что просмотров хранятся в WEB-INF /Grails-приложение / просмотров .Вы можете искать этот ресурс.

def uri = this.getClass().getResource("/grails-app/views/...").toURI()
if(new File(uri).exists()){...}

Использовать PathMatchingResourcePatternResolver

Найти вдохновение в assertView методе GrailsUrlMappingsTestCase.

def patternResolver = new PathMatchingResourcePatternResolver()
def pathPattern = "grails-app/views/" + ((controller) ? "$controller/" : "") + "${view}.*"
if (!patternResolver.getResources(pathPattern)) {...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...