首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >autoEscape为true,但Ratpack无法转义HTML元素

autoEscape为true,但Ratpack无法转义HTML元素
EN

Stack Overflow用户
提问于 2020-04-02 01:14:48
回答 1查看 26关注 0票数 0

在Ratpack 1.6.1中,我有一个带有div元素的gtpl模板,如下所示:

div('<pre>HELLO</pre>')

即使autoEscapetrue,Ratpack也不会转义内部的pre元素。有没有办法解决/解决这个问题?

P.S. TemplateConfiguration中的autoEscape默认为true。将其显式设置为true也无济于事:

代码语言:javascript
复制
module(MarkupTemplateModule) { TemplateConfiguration config ->
    config.baseTemplateClass = MarkupTemplateExtensions
    config.autoEscape = true
}
EN

回答 1

Stack Overflow用户

发布于 2020-04-08 20:45:58

终于找到了答案:

autoEscape不支持在模板中进行转义。它只支持转义直接传递到groovyMarkupTemplate中的数据,如下所示:

代码语言:javascript
复制
groovyMarkupTemplate('template.gtpl', var: '<pre>Escaped</pre>')

解决方案

为了在默认情况下在所有模板中启用转义,有必要像这样子类化BaseTemplate

在Ratpack.groovy中应用我们自己的模板处理器

代码语言:javascript
复制
bindings {

   module(MarkupTemplateModule) { TemplateConfiguration config ->
       config.baseTemplateClass = MyMarkupTemplate
   }
}

子类BaseTemplate并覆盖methodMissing():

代码语言:javascript
复制
@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)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60976577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档