私は周りを見回しましたが、Grails で *.html ファイルを単純にインクルードまたはレンダリングする方法を見つけることができませんでした。私のアプリケーションは、html ファイルとして配信されるテンプレートを必要としg.render
ます。<g:render>
このためには、ご存知のように、_foo.gsp
レンダリングするために html ファイルをファイルに変換する必要があります。なぜ html の直接サポートがないのか、あるのか??
ありがとう!
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
ドンの例を少し修正しました。私にとってはうまくいきます
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);
}
}
Closure include = { attr ->
out << Holders.getServletContext().getResource(attr.file).getContent();
}
これは、grails メイン アプリケーションの web-app フォルダーに相対的です。
@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
}