groovy html模板' yieldUnescaped'在ratpack中被忽略

时间:2015-12-28 06:59:25

标签: groovy ratpack

我正在尝试将部分html注入GTPL file,但似乎总是"逃避" HTML内容。如何将HTML代码段发送到标记并直接呈现?

" hello.gtpl"

的内容
yieldUnescaped '<!DOCTYPE html>'
html {
    yieldUnescaped text
}

来自ratpack.groovy

    get('helloplain') { //works .but clumsy
        String htmlPayLoad = "<!DOCTYPE html>  <html>  <title> Hello </title><body> <h3> Hello </h3> </body> </html>"
        context.getResponse().contentType(HttpHeaderConstants.HTML_UTF_8).send(htmlPayLoad.getBytes());
    }
    get('hellotemplate') { //ex: /users/
        String text = "<title> Hello </title><body> <h3> Hello </h3> </body> "
        render groovyMarkupTemplate( "hello.gtpl"  ,text: text  )
    }

localhost:5050/helloplain提供了一个正确的HTML,其中localhost:5050/hellotemplate提供了一个已转义所有HTML内容的文件。

<!DOCTYPE html><html>&lt;title&gt; Hello &lt;/title&gt;&lt;body&gt; &lt;h3&gt; Hello &lt;/h3&gt; &lt;/body&gt; </html>

我错过了什么?

1 个答案:

答案 0 :(得分:6)

您需要配置MarkupTemplateEngine才能禁用自动转义功能。 这是一个使用最新稳定版Ratpack的工作示例。

ratpack.groovy

@Grab('io.ratpack:ratpack-groovy:1.1.1')

import static ratpack.groovy.Groovy.ratpack
import static ratpack.groovy.Groovy.groovyMarkupTemplate
import ratpack.groovy.template.MarkupTemplateModule

ratpack {
  bindings {
    module(MarkupTemplateModule) { config ->
      config.autoEscape = false
    }
   }

  handlers {
    get {
      String text = '<title>Hello</title><body><h3>Hello</h3></body>'
      render groovyMarkupTemplate('hello.gtpl', text: text)
    }
  }
}

模板/ hello.gtpl

yieldUnescaped '<!DOCTYPE html>'

html {
  yieldUnescaped text
}

针对正在运行的应用

输出卷曲
$ curl localhost:5050
<!DOCTYPE html><html><title>Hello</title><body><h3>Hello</h3></body></html>

有关可用于配置的属性的列表,您可以查看GDK http://docs.groovy-lang.org/latest/html/gapi/groovy/text/markup/TemplateConfiguration.html