【发布时间】:2013-03-11 16:15:23
【问题描述】:
我正在尝试在我的控制器范围之外呈现一个模板。
我要渲染模板的视图位于views/home/index.gsp
编辑:
我尝试渲染位于 /views/templates_list-clients.gsp”和“_list-hubs.gsp” /strong> 在位于 /views 的主布局“main.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 模板的前导斜杠。 -
很抱歉,我在发布错误时没有重新加载浏览器。我在上面对实际错误进行了编辑。
-
仍然看起来好像缺少前导斜杠。另外,您是否在脚本块 (
<% ...%>) 中调用render?这是discouraged。为什么不使用<g:render>标签(或template namespace)? -
只是一个注释...您在视图中渲染。那你为什么不通过标签渲染,例如
<g:renger template="/templates/list-hubs" ... />? -
我在 2.1.1 环境中测试过,如果你把
render部分放在控制器中它工作正常。但最好不要使用templates以免混淆,因为它是为src目录中的脚手架模板文件夹保留的。
标签: grails