如何以编程方式了解grails中是否存在视图或布局文件

时间:2010-08-02 21:31:59

标签: grails views layout

我想以编程方式了解Grails中是否存在视图或布局。

我正在考虑获取绝对路径并要求File.exists,但我不知道如何为每个环境获取此路径。

我曾尝试groovyPagesTemplateEngine.getUriWithinGrailsViews('a-view.gsp')但没有成功。

你能给我任何指针吗?

提前致谢

3 个答案:

答案 0 :(得分:16)

从Grails 2.0开始,您可以注入GrailsConventionGroovyPageLocator

GrailsConventionGroovyPageLocator groovyPageLocator

并致电

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

检查是否存在视图或模板。

答案 1 :(得分:4)

除了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()
}

此示例当然适用于模板,但正如您从文档中看到的那样,视图也存在类似的方法。

答案 2 :(得分:3)

我看到了两种可能性

搜索视图文件

如果您构建war文件,您会看到 views 存储在 WEB-INF / grails-app / views 中。您可以搜索该资源。

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

使用PathMatchingResourcePatternResolver

在GrailsUrlMappingsTestCase的assertView方法中找到灵感。

def patternResolver = new PathMatchingResourcePatternResolver()
def pathPattern = "grails-app/views/" + ((controller) ? "$controller/" : "") + "${view}.*"
if (!patternResolver.getResources(pathPattern)) {...}