我想以编程方式了解Grails中是否存在视图或布局。
我正在考虑获取绝对路径并要求File.exists,但我不知道如何为每个环境获取此路径。
我曾尝试groovyPagesTemplateEngine.getUriWithinGrailsViews('a-view.gsp')
但没有成功。
提前致谢
答案 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()){...}
在GrailsUrlMappingsTestCase的assertView方法中找到灵感。
def patternResolver = new PathMatchingResourcePatternResolver()
def pathPattern = "grails-app/views/" + ((controller) ? "$controller/" : "") + "${view}.*"
if (!patternResolver.getResources(pathPattern)) {...}