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

use*_*427 6 grails layout views

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

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

我试过groovyPagesTemplateEngine.getUriWithinGrailsViews('a-view.gsp')没有成功.

你能指点我吗?

提前致谢

Ing*_*gel 16

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

GrailsConventionGroovyPageLocator groovyPageLocator
Run Code Online (Sandbox Code Playgroud)

并打电话

groovyPageLocator.findViewByPath(...)
groovyPageLocator.findTemplateByPath(...)
Run Code Online (Sandbox Code Playgroud)

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

  • 这也很好用......`groovyPageLocator.findTemplate("/ same/as/render/template")`(如果你有一个模板文件在`/grails-app/views/same/as/render/_template.gsp `) (2认同)
  • 在最近的 Grails 版本中(也许自从 GSP 成为插件以来),页面定位器的确切类型已经发生了变化。通过在注入时省略类来进行作弊,例如“def groovyPageLocator” (2认同)

amr*_*mra 3

我看到两种可能性

搜索查看文件

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

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

使用 PathMatchingResourcePatternResolver

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

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