【问题标题】:Custom Tag Library in grails not passing HTML tags out properlygrails中的自定义标签库没有正确传递HTML标签
【发布时间】:2014-04-14 21:24:34
【问题描述】:

我正在使用 grails 2 的权威指南(使用 grails 2.3.7)学习 grails,当我查看自定义标记库时,它提供了一个示例自定义标记,如下所示:

    def repeat = { attrs, body ->
        int n = attrs.int('times)
        n?.times { counter ->
              out << body(counter +1)
        }
    }

所以当我像这样使用这个标签时:

   <g:repeat times="3">
      Hello number ${it}<br>
   </g:repeat>

我希望在渲染的 HTML 上得到三个单独的行:

   Hello number 1
   Hello number 2     
   Hello number 3

相反,我得到:

   hello number 1<br>hello number 2<br>hello number 3<br>

我找到了看起来应该有帮助的方法,例如 decodeHTML() 但是我无法更改我想要的输出,而且我不确定我做错了什么。

我已经尝试过:

   out <<body.decodeHTML()

但我得到一个空指针错误...

【问题讨论】:

    标签: grails taglib


    【解决方案1】:

    除非您的 taglib 中有其他内容或调用该标记的 GSP 中有不寻常的内容,否则这是没有意义的。

    您的 taglib 中是否可能包含类似 defaultEncodeAs='html' 的内容?

    【讨论】:

    • 是的……就是这样。我会去这里羞愧地低下头。
    • 根据标签库中的其他内容,您可能需要使用 encodeAsForTags。请参阅用户指南的XSS Prevention section 中的“每个标签库编码”小节。
    【解决方案2】:

    这样使用标签:

    <g:repeat times="3">
        Hello number ${it}<br/>
    </g:repeat>
    

    HTML5 可以呈现&lt;br&gt;,但您似乎使用的是版本 4 或更低版本。

    【讨论】:

    • 上述答案解决了这个问题,即在我生成它时,在标签库中,grails 放入了defaultEncodeAs='html',这导致我的输出字符串被编码为html,从而改变了&lt;&amp;gt;,一旦我删除它就解决了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 2015-01-27
    相关资源
    最近更新 更多