8

私は周りを見回しましたが、Grails で *.html ファイルを単純にインクルードまたはレンダリングする方法を見つけることができませんでした。私のアプリケーションは、html ファイルとして配信されるテンプレートを必要としg.renderます。<g:render>このためには、ご存知のように、_foo.gspレンダリングするために html ファイルをファイルに変換する必要があります。なぜ html の直接サポートがないのか、あるのか??

ありがとう!

4

6 に答える 6

1

grails アプリ (v2.4.4) でホストされている静的な html/ajax ページを書きたかったのですが、URL の書き換えにはコントローラーを使用しました。ファイルを web-app/ (参照しやすいように) に移動し、次のように「file」および「contentType」パラメーターを指定して render() メソッドを使用することで、これを実現できました。

// My controller action
def tmp() {
    render file: 'web-app/tmp.html', contentType: 'text/html'
}

注: 私は run-app を使用してこれを試しただけで、戦争をパッケージ化して tomcat に展開していません。

ドキュメント: http://grails.github.io/grails-doc/2.4.4/ref/Controllers/render.html

于 2015-08-01T21:24:25.870 に答える
1

ドンの例を少し修正しました。私にとってはうまくいきます

org.apache.commons.io.IOUtils をインポート

class HtmlTagLib {

    static namespace = 'html'

    def render = {attrs ->

        def filePath = attrs.file

        if (!filePath) {
            throwTagError("'file' attribute must be provided")
        }
        IOUtils.copy(request.servletContext.getResourceAsStream(filePath), out);
    }
}
于 2013-12-01T18:51:34.877 に答える
0
  Closure include = { attr ->
        out << Holders.getServletContext().getResource(attr.file).getContent();
    }

これは、grails メイン アプリケーションの web-app フォルダーに相対的です。

于 2014-06-17T08:45:43.247 に答える
0

@momo のアプローチを使用して、grails レンダリング プラグイン用の外部ファイルを含めることができました。ネットワーク パスは、より高い環境では失敗します。私の場合は次のようになりました。

def includeFile = { attr ->
    URL resource = Holders.getServletContext().getResource(attr.file)
    InputStream content = resource.getContent()
    String text = content?.text
    log.info "includeFile($attr) - resource: $resource, content.text.size(): ${text?.size()}"
    out << text
}
于 2015-09-24T17:22:58.373 に答える