4

データベースに gsp スニペットが保存されているとします。プログラムでデータ モデルとマージして文字列を生成するにはどうすればよいですか。

4

3 に答える 3

4

GrailsアプリのapplicationContextには、

groovyPagesTemplateEngine

デフォルトでは、これはGroovyPagesTemplateEngineのインスタンスです。したがって、コントローラーまたはサービスで次のようなコードを使用できます。

class MyService/MyController {
    def groovyPagesTemplateEngine

    String renderGSPToString(String uri, Map model) {
        groovyPagesTemplateEngine.createTemplate(uri).make(model).toString()
    }
}

注意:このスニペットは、実行中のコードから実際に取得されたものではなく、アイデアを明確にするだけです。

于 2010-04-17T12:59:38.983 に答える
0

必要なことを行うコントローラーメソッドを作成できます。次に、目的を達成するための HTTP API が作成されます。コントローラー メソッドのテンプレートには<g:render>、適切にパラメーター化されたタグがあります。

于 2013-10-15T20:49:13.647 に答える
0

代わりのscriptsourceでgroovyPageRendererを使用して、複雑なgspsをオフラインでレンダリングする汚い(しかし機能する)方法を見つけました。その場合、g:ifなどを含むすべての gsp 構文にアクセスできます。

最初に 2 つのダミー クラスを定義します。

class StringPageLocator extends GrailsConventionGroovyPageLocator {
    GroovyPageScriptSource findViewByPath(String content) {
        return new StringScriptSource(content)
    }
}

class StringScriptSource implements GroovyPageScriptSource{

    String content

    public StringScriptSource(String content) {
        this.content=content
    }

    @Override String suggestedClassName() { "DummyName" }
    @Override boolean isPublic() { true }
    @Override String getScriptAsString() { return content }
    @Override boolean isModified() { true }
    @Override String getURI() { "DummyURI" }
}

そして、それを次のように使用できます。

def groovyPageLocator // Injected automaticaly to service/controller etc...

groovyPageRenderer.groovyPageLocator=new StringPageLocator()
String output=groovyPageRenderer.render(
    view:'Hello2 ${user} <g:if test="${test}">TRUE!!!</g:if>',
    model:[user:'test user2',test:true]

)

于 2013-06-18T18:22:33.023 に答える