2013-02-14 1 views
4

Я использую Thymeleaf в сочетании с процедурой микро-шаблонов js, результатом которой являются специальные символы в значениях атрибутов. При запуске Thymeleaf наКак предотвратить тимелеар от замены специальных символов в значениях атрибутов HTML?

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

создает

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

в то время как я бы ожидать, чтобы получить точно такой же я положил в процессор. Как использовать специальные символы в значениях атрибутов HTML? Большое спасибо!

+0

Решение состоит в том, чтобы расширить шаблон писателя для этого puprose. Нет настройки для настройки поведения сериализации для атрибутов. Для меня остается непонятным, почему кодируются атрибутные значения атрибутов non-thymeleaf. – brainfrozen

ответ

0

Вы можете попробовать окружить свой код блоком CDATA.

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

+1

Блоки CDATA, по крайней мере, редко встречаются в значениях атрибутов. Также я использую HTML не XHTML, и если бы я мог использовать блоки CDATA, мне нужно было бы удалить соответствующую разметку перед интерпретацией шаблона. – brainfrozen

+0

404 не найдено по ссылке –

0

Я не уверен, о других режимах шаблона, но я знаю, html5 и XML не собираемся позволить вам сделать это, так как документ thymeleaf будет генерирующим НЕ будет проверять против DOCTYPE. По крайней мере, в этих режимах я не думаю, что это возможно. (Может быть, с пользовательским диалектом?)

Так почему же так или иначе желание использовать два шаблонных инструмента на одной странице?

+0

Мы используем двухфазный шаблонный подход, сервер и клиент. В этом сценарии полезен способ интеграции тимелеафа с html-страницей. Мы также переключимся на другое, более подходящее решение для шаблонов, но пока не нашли его. Спасибо, благодарный. – brainfrozen

0

Как уже было предложено hubbardr, использование LEGACYHTML5 в качестве шаблона может помочь вам здесь.

+2

Согласен, но предпочитаемый диалект HTML5 предполагает строгий синтаксис XHTML и поэтому не был полезен для нас, когда мы столкнулись с вышеупомянутой проблемой. По-моему, это скорее ошибка в шаблоне. Где указать значение атрибута атрибута non-thymeleaf. – brainfrozen

1

Существует несколько вариантов для рассмотрения:

  • Используйте LEGACYHTML5 опцию в templateResolver как упоминалось выше
  • переопределение template метода в Underscore.js

Я предпочитаю второй подход. Поместите этот код в инициализации скрипта:

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); 
}; 
Смежные вопросы