2013-02-14 24 views
4

我使用Thymeleaf结合js微模板例程,这会导致属性值中的特殊字符。当如何防止thymeleaf替换HTML属性值中的特殊字符?

<a style="display:<%= x ? 'block' : 'none' %>;"> 

运行Thymeleaf它创建

<a style="display:&lt;%= x ? &#39;block&#39; : &#39;none&#39; %&gt;;"> 

,而我希望得到正是我放到处理器相同。 如何在HTML属性值中使用特殊字符? 非常感谢!

+0

一个解决办法是延长模板作家这个puprose玩。没有设置来配置属性的序列化行为。对于我来说,它仍然不清楚为什么属性值的非thymeleaf属性编码。 – brainfrozen 2013-02-18 11:25:02

回答

0

你可以尝试用CDATA块包围你的代码。

http://www.w3schools.com/xml/xml_cdata.asp

+1

CDATA块在属性值中至少不常见。此外,我使用HTML而不是XHTML,如果我可以使用CDATA块,则需要在解释模板之前删除相应的标记。 – brainfrozen 2013-06-22 21:42:13

+0

未找到404链接 – 2018-02-19 04:09:16

0

我不知道其他的模板模式,但我知道HTML5和XML是不会让你这样做,因为thymeleaf会产生不会验证对文档类型的文档。所以至少在这些模式下,我不认为这是可能的。 (也许用自定义方言?)

那么为什么要在同一页面上使用两个模板工具呢?

+0

我们正在使用两阶段模板方法,即服务器和客户端。在这种情况下,thymeleaf与html页面集成的方式很有帮助。我们也会转向另一种更合适的模板解决方案,但还没有找到。自定义方言将是一个解决方案,谢谢。 – brainfrozen 2013-10-01 13:04:29

0

正如hubbardr已经建议的那样,使用LEGACYHTML5作为模板模式可能会对您有所帮助。

+2

同意,但青睐的HTML5方言期望严格的XHTML语法,因此在面对上述问题时对我们不利。在我看来,这是模板作者中的一个错误。触及非胸腺属性属性值的点在哪里? – brainfrozen 2013-10-01 13:07:35

1

有一些变种审查:

  • 使用templateResolverLEGACYHTML5选项,如Underscore.js

上述

  • 覆盖template方法提到我更喜欢第二种方法。将此代码放入您的初始化脚本:

    var original = _.template; 
    _.template = function(content) { 
        // fix operators escaped by Thymeleaf HTML5 validator 
        content = content.replace(/&#39;/g, "'"); 
        content = content.replace(/&lt;/g, "<"); 
        content = content.replace(/&gt;/g, ">"); 
        return original.call(this, content); 
    };