groovy html 模板“yieldUnescaped”在 ratpack 中被忽略
groovy html template ' yieldUnescaped ' is ignored in ratpack
我正在尝试将部分 html 注入 GTPL file,但它似乎总是 "escapes" 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><title> Hello </title><body> <h3> Hello </h3> </body> </html>
我错过了什么?
您需要配置 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)
}
}
}
templates/hello.gtpl
yieldUnescaped '<!DOCTYPE html>'
html {
yieldUnescaped text
}
针对 运行 应用的 curl 输出
$ 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
我正在尝试将部分 html 注入 GTPL file,但它似乎总是 "escapes" 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><title> Hello </title><body> <h3> Hello </h3> </body> </html>
我错过了什么?
您需要配置 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)
}
}
}
templates/hello.gtpl
yieldUnescaped '<!DOCTYPE html>'
html {
yieldUnescaped text
}
针对 运行 应用的 curl 输出
$ 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