【问题标题】:GSP rendering programmatically以编程方式呈现 GSP
【发布时间】:2010-04-17 12:02:47
【问题描述】:

假设我的数据库中存储了一个 gsp sn-p。如何以编程方式将其与数据模型合并以生成字符串。

【问题讨论】:

    标签: grails groovy gsp


    【解决方案1】:

    任何 Grails 应用程序的 applicationContext 都包含一个名为

    的 bean
    groovyPagesTemplateEngine
    

    默认情况下,这是GroovyPagesTemplateEngine 的一个实例。所以你可以在你的控制器或服务中使用这样的代码:

    class MyService/MyController {
        def groovyPagesTemplateEngine
    
        String renderGSPToString(String uri, Map model) {
            groovyPagesTemplateEngine.createTemplate(uri).make(model).toString()
        }
    }
    

    注意:这个 sn-p 并不是真正从运行代码中获取的,它应该只是澄清这个想法。

    【讨论】:

    【解决方案2】:

    我发现了一种使用带有替代脚本源的 groovyPageRenderer 离线渲染复杂 gsps 的 DIRTY(但有效)方法。在这种情况下,您可以访问所有 gsp 语法,包括 g:if 等。

    首先定义两个虚拟类:

    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]
    

    )

    【讨论】:

      【解决方案3】:

      您可以创建一个控制器方法来执行您想要的操作。然后你将有一个 HTTP api 来完成你想要的。控制器方法的模板将有一个&lt;g:render&gt; 标记,并进行了适当的参数化。

      【讨论】:

        猜你喜欢
        • 2021-09-07
        • 2010-12-15
        • 1970-01-01
        • 1970-01-01
        • 2011-02-02
        • 2020-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多