在 Grails 2.x 中找不到名称和路径的模板

Template not found for name and path in Grails 2.x

我正在尝试在我的控制器范围之外渲染一个模板。

我要渲染模板的视图位于views/home/index.gsp

编辑:

我尝试渲染模板 "_list-clients.gsp" 和 "_list-hubs.gsp",它们都位于我的主布局 "main.gsp" 的 /views/templates 中,位于 /通过使用我在位于 /views/client

的视图 "list.gsp" 中调用的 taglib 来查看

这里是我如何将内容标签包含到视图中的:

1
<g:pageProperty name="page.client-menu"/>

这里我在 list.gsp 的内容标签中调用 taglib:

1
2
3
<content tag="client-menu">
    <g:createClientMenu ></g:createClientMenu>
</content>

这是我的标签库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.pmedia.taglib

import com.pmedia.domain.Company

class CreateClientMenuTagLib {

def createClientMenu = {        attrs, body ->
    def company = Company.findByName("pMediaNetwork")

    out << '
<ul>
'
    out << '<li class="dropdown">'
    out << ''
    out << 'Select Hub or Client for ' + company?.name
    out << '<b class="caret">'
    out << ''
    out << '<ul class="dropdown-menu pull-right">'
    if ( company?.getHubs()) {
        out << render(template:"/templates/list-hubs", collection: company.getHubs(), var:"hubs")
    }
    if ( company?.getClients()) {
        out << render(template:"/templates/list-clients", collection: company.getClients(), var:"clients")
    }
    out << '
</ul>
'
    out << '
</li>
'
    out << '
</ul>
'

    }
}

模板位于views/templates/_list-hubs.gsp

我不断收到此错误:

1
2
3
4
5
6
7
8
URI
/newLayout/home/index

Class
org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException

Message
Template not found for name [templates/list-hubs] and path [/home/templates/_list-hubs.gsp]

当我用 "/" 引导 URL 时,我希望 grails 开始查看视图文件夹,但由于某些原因无法找到模板。

有人知道怎么解决吗?


终于我发现了错误。我递归地调用了模板。在我的一个模板中,路径不正确......抱歉为这样一个愚蠢的错误而烦恼。下次我在 stackoverflow 上发布错误时,我会确保发布所有涉及的代码。
无论如何感谢所有提供帮助的人。


如果我猜对了,你需要把/templates放到/grails-app/views,而不是放到/grails-app/views/layout/views

我测试了你的代码很长一段时间,但没有得到错误。实际上我删除了

1
<g:pageProperty name="page.client-menu"/>

1
<content tag="client-menu">

然后保持

1
<g:createClientMenu ></g:createClientMenu>

,代码可以正常工作。

当我再次仔细阅读您的问题帖子时,我注意到了这一点:

... the templates"_list-clients.gsp" and
"_list-hubs.gsp", both located in /views/templates in my main layout
"main.gsp" located in /views ...

所以我尝试将_list-clients.gsp 放到/layout/views/templates,错误重现。这就是为什么我猜您将 template 文件夹放在与 taglib 不一致的路径中。


尝试从 out << render(template:"...", ...).

行中删除 /views 前缀