【问题标题】:Template not found for name and path in Grails 2.x在 Grails 2.x 中找不到名称和路径的模板
【发布时间】:2013-03-11 16:15:23
【问题描述】:

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

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

编辑:

我尝试渲染位于 /views/templates_list-clients.gsp”和“_list-hubs.gsp” /strong> 在位于 /views 的主布局“ma​​in.gsp”中,使用我在视图“list.gsp”中调用的标记库>" 位于 /views/client

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

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

这里我在 list.gsp 的 content-tag 中调用 taglib:

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

这是我的标签库:

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 << '<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">'
    out << 'Select Hub or Client for ' + company?.name
    out << '<b class="caret"></b>'
    out << '</a>'
    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

我不断收到此错误:

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 开始查看视图文件夹,但由于某些原因找不到模板。

有人知道怎么解决吗?

【问题讨论】:

  • 代码和错误似乎不相关。您的渲染代码使用模板/templates/list-hubs,而您的错误消息是模板templates/list-clients。您忘记了 clients 模板的前导斜杠。
  • 很抱歉,我在发布错误时没有重新加载浏览器。我在上面对实际错误进行了编辑。
  • 仍然看起来好像缺少前导斜杠。另外,您是否在脚本块 (&lt;% ...%&gt;) 中调用 render?这是discouraged。为什么不使用&lt;g:render&gt; 标签(或template namespace)?
  • 只是一个注释...您在视图中渲染。那你为什么不通过标签渲染,例如&lt;g:renger template="/templates/list-hubs" ... /&gt;?
  • 我在 2.1.1 环境中测试过,如果你把 render 部分放在控制器中它工作正常。但最好不要使用templates 以免混淆,因为它是为src 目录中的脚手架模板文件夹保留的。

标签: grails


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    尝试从out &lt;&lt; render(template:"...", ...) 行中删除/views 前缀。

    【讨论】:

    • 我都试过了,template:"/views/templates/..." 和 template:"/templates/..." 仍然出现错误。
    • 能否请您查看上面给出的已编辑问题?我猜一开始它遗漏了一些信息。
    • 尝试定位问题。如果您从字面上调用&lt;g:createClientMenu &gt;&lt;/g:createClientMenu&gt; 而不是&lt;g:pageProperty name="page.client-menu"/&gt; 怎么办?如果您直接在&lt;content tag="client-menu"&gt; 中内联所需的内容而不是使用标记库怎么办?如果同时应用这两种简化会怎样?
    • 感谢您的建议!明天上班我会尝试你的一些想法。
    【解决方案3】:

    如果我的猜测是正确的,您需要将/templates 放入/grails-app/views,而不是将其放入/grails-app/views/layout/views

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

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

    <content tag="client-menu">
    

    然后继续

    <g:createClientMenu ></g:createClientMenu>
    

    ,代码可以正常工作。

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

    ...模板“_list-clients.gsp”和 “_list-hubs.gsp”,都位于我的主布局中的 /views/templates “main.gsp”位于 /views ...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      相关资源
      最近更新 更多