データベースに gsp スニペットが保存されているとします。プログラムでデータ モデルとマージして文字列を生成するにはどうすればよいですか。
1553 次
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 に答える