2013-03-11 115 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上發佈一個錯誤,我會確保發佈所有涉及的代碼。 無論如何,感謝所有幫助過的人。