2013-03-11 36 views
0

我试图在我的控制器范围之外呈现模板。在Grails 2.x中未找到名称和路径的模板

,我想呈现模板位于景色的/ home/index.gsp中的观点

编辑:

我尝试呈现模板 “_list-clients.gsp”和“_list-hubs.gsp”,均位于/视图/模板中我主要布局“main.gsp”位于/视图通过使用我invok标签库E在一个视图“的list.gsp”位于/视图/客户

Here's如何我包括内容标签的视图:

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

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

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

这里是我的taglib:

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>' 

    } 
} 

模板位于视图/模板/ _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] 

我预想的Grails开始寻找在查看文件夹时,我带领的URL一个“/”但由于某些原因模板无法找到。

有人知道如何解决这个问题吗?

+0

代码和错误似乎没有关系。您的渲染代码使用模板'/ templates/list-hubs',而您的错误消息是针对模板'templates/list-clients'。您已经忘记了**客户**模板的主要斜线。 – hsan 2013-03-11 16:28:35

+0

对不起,当发布错误时,我没有重新加载浏览器。我在上面编辑了它的实际错误。 – bernheart 2013-03-11 16:38:21

+1

仍然看起来好像你缺少主导斜线。另外,你是否在scriptlet块('<% ...%>')中调用'render'?这是[灰心](http://grails.org/doc/latest/guide/theWebLayer.html#GSPBasics)。为什么不使用''标签(或[模板名称空间](http://grails.org/doc/latest/guide/theWebLayer.html#viewsAndTemplates))? – hsan 2013-03-11 16:57:02

回答

0

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

+0

我试了两个,模板:“/ views /模板/ ...”和模板:“/模板/ ...”仍然出现错误。 – bernheart 2013-03-11 17:30:43

+0

你能否回顾上面给出的编辑问题?我想它首先错过了一些信息。 – bernheart 2013-03-11 17:51:07

+0

尝试本地化问题。如果你直接调用''而不是''?如果你直接在'>'中直接插入想要的内容,而不是使用taglib?如果你同时应用这两种简化会怎样? – eugene82 2013-03-11 17:56:59

0

如果我的猜测是正确的,则需要将/templates设置为/grails-app/views,而不是将其设置为/grails-app/views/layout/views

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

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

<content tag="client-menu"> 

,只是保持

<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不一致的路径上。

1

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