2013-02-14 23 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); 
    };