0

コントローラーの範囲外でテンプレートをレンダリングしようとしています。

テンプレートをレンダリングするビューは、views/home/index.gsp にあります。

編集:

テンプレート「 _list-clients.gsp」と「_list-hubs.gsp 」をレンダリングしようとしました。どちらも /views にあるメイン レイアウト「main.gsp」の/views/templatesにあり、呼び出す taglib を使用します。 /views/clientにあるビュー " list.gsp "

ビューに content-tag を含める方法は次のとおりです。

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

ここでは、list.gsp の content-tag で taglib を呼び出します。

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

    }
}

テンプレートは、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 がビュー フォルダーを検索し始めると思っていましたが、何らかの理由でテンプレートが見つかりません。

これを解決する方法を知っている人はいますか?

4

3 に答える 3

1

最後に、エラーを見つけました。テンプレートを再帰的に呼び出しました。そして、私のテンプレートの 1 つで、パスが正しくありませんでした。次回スタックオーバーフローにエラーを投稿するときは、関連するすべてのコードを必ず投稿してください。とにかく助けてくれたみんなに感謝します。

于 2013-03-12T09:34:52.413 に答える
0

私の推測が正しければ、 に置く/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 にあるメイン レイアウト "main.gsp" の /views/templates にあります ...

ということで入れ_list-clients.gspてみたところ/layout/views/templates、エラーが再現。templateそのため、フォルダーを taglib と矛盾するパスに配置したと思います。

于 2013-03-12T02:52:35.273 に答える
0

/views行からプレフィックスを削除してみてくださいout << render(template:"...", ...)

于 2013-03-11T17:26:55.087 に答える