在Ratpack 1.6.1中,我有一个带有div元素的gtpl模板,如下所示:
div('<pre>HELLO</pre>')
即使autoEscape为true,Ratpack也不会转义内部的pre元素。有没有办法解决/解决这个问题?
P.S. TemplateConfiguration中的autoEscape默认为true。将其显式设置为true也无济于事:
module(MarkupTemplateModule) { TemplateConfiguration config ->
config.baseTemplateClass = MarkupTemplateExtensions
config.autoEscape = true
}发布于 2020-04-08 20:45:58
终于找到了答案:
autoEscape不支持在模板中进行转义。它只支持转义直接传递到groovyMarkupTemplate中的数据,如下所示:
groovyMarkupTemplate('template.gtpl', var: '<pre>Escaped</pre>')解决方案
为了在默认情况下在所有模板中启用转义,有必要像这样子类化BaseTemplate:
在Ratpack.groovy中应用我们自己的模板处理器
bindings {
module(MarkupTemplateModule) { TemplateConfiguration config ->
config.baseTemplateClass = MyMarkupTemplate
}
}子类BaseTemplate并覆盖methodMissing():
@InheritConstructors
abstract class MyMarkupTemplate extends BaseTemplate {
@Override
Object methodMissing(String tagName, Object args) {
if (args instanceof Object[]) {
Object[] argsArray = (Object[])args
// Traverse argsArray ans escape every instance of String
// with XmlUtil.escapeXml()
return super.methodMissing(tagName, argsArray)
}
super.methodMissing(tagName, args)
}
}https://stackoverflow.com/questions/60976577
复制相似问题