1

現在のリクエスト ロケールに基づいてコンテンツをロードするスクリプトを作成しました。何かのようなもの

class ScriptsTagLib {
  static namespace = "my"
  def loadLangInfo = { attrs ->
    Locale locale = RequestContextUtils.getLocale(request)
    r.script() {
      out << '$(function(){ loadLangInfo("'+locale.language+'") });'
    }
  }
}

これをレイアウトに追加すると、ページでエラーがスローされます。

行 [6] の式 [my.loadLangInfo()] の評価中にエラーが発生しました: モジュール [-page-fragments-] を追加できません。モジュール [-page-fragments-] は、この要求に処理 [延期] を必要とします - その処理は既にレンダリングされています。

エラー 2012-11-19 15:13:54,801 [http-bio-8080-exec-5] ERROR [Tomcat].[localhost] - Exception Processing ErrorPage[errorCode=500, location=/grails-errorhandler] メッセージ: java. io.UnsupportedEncodingException: 文字エンコーディング [null] はサポートされていません

しかし、レイアウトの代わりにこのタグをページに追加すると、ページは正常にレンダリングされます。

r.script()レイアウトに追加することはできませんか?

編集:問題は実際にはレイアウト内のリソースにあります。失敗する別の例は次のとおりです。

<g:layoutHead/>
<r:script>
$(function(){ });
</r:script>
<r:layoutResources />

編集 2:コンテキストに関する詳細情報

  • グレイルズ 2.0.4
  • リソース 1.2.RC2

また、これはプラグイン内のレイアウトであり、1 つのアプリではありません。

Grails 2.1 ではテストされていませんが、テストされます。

編集3

Grails 2.1.1Grails 2.0.4新しい新しいプラグイン プロジェクトを使用してテストしたところ、レイアウトのスクリプト タグは無視されます。

./views/layout/test.gsp -> スクリプトは無視されました

<!doctype html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title><g:layoutTitle default="Insoft4 UI Plugin"/></title>
        <g:layoutHead/>

        <r:layoutResources />
    </head>
    <body>
        <g:layoutBody/>
        <r:script disposition="defer">
            alert('layout!');
        </r:script>
        <r:layoutResources />
    </body>
</html>

./views/index.gsp -> スクリプト OK

<!doctype html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Teste</title>
        <meta name="layout" content="teste" />
                <r:script disposition="defer">
            alert('index!');
        </r:script>
        <r:layoutResources />
    </head>
    <body>
        <h1>Testing this index!</h1>
        <r:layoutResources />
    </body>
</html>
4

2 に答える 2

4

<r:layoutResources />レイアウトとページの両方で宣言し、レイアウトにスクリプトを追加しようとすると、問題が発生することがわかりました。

修正するためにlayoutResources、すべてのビューからを削除し、レイアウトだけを残しました。

于 2012-11-29T11:10:56.410 に答える
0

レイアウトの最後の r:layoutResources の前にタグを追加してみてください。

于 2012-11-19T21:56:51.017 に答える