2013-08-19 1 views
2
<script th:inline="javascript" type="text/javascript"> 
    //expose list data to javascript 
    var listObject = /*[[${listObject}]]*/ []; 
</script> 

заменяемый текст, напечатанный в файле, отличается от того, что делает ObjectMapper библиотеки Jackson.themmeleaf inline javascript framework issue

С Thymeleaf в приведенном выше примере, ListObject будет

{ 
    "dataType":{ 
     "$type":"DataType", 
     "$name":"STRING" 
    }, 
    "friendlyName":"Customer Key" 
} 

Если я напечатать объект с ObjectMapper (который также используется с Spring @ RequestBody/@ ResponseBody), то это будет

{ 
    "dataType":"STRING", 
    "friendlyName":"Customer Key" 
} 

Есть ли способ заставить тимелеар быть совместимым с ObjectMapper.

ответ

2

Я думаю, что this должен сказать что-то о Джексоне и JSON, вложенных в тимелеаф.
В заключение рассмотрим возможность переключения на пользовательские TextInliners для 3.0 thymeleaf рубеж.

Итак, в настоящее время нет «чистого» способа переключения на сериализацию Jackson json.

Однако вы можете использовать свой собственный TextInliner. То есть:

  1. Создайте класс org.thymeleaf.standard.inliner.StandardJavaScriptTextInliner.
  2. Внесите свою собственную версию метода formatEvaluationResult(Object),
    , где вы можете позвонить в Jackson ObjectMapper.
  3. Поместите этот новый класс StandardJavaScriptTextInliner в нужное место, чтобы он загрузился перед исходным классом (например, в tomcat поместите его в классы dir при правильной структуре пакета).
+0

Это сообщение старое, так ли это еще так? Проблема в предоставленной вами ссылке все еще не решена. Кроме того, почему так мало оборотов? Это был единственный ответ, который я смог найти. Моя проблема заключается в том, что Thymeleaf игнорирует мой '@JsonInclude (JsonInclude.Include.NON_NULL)', поэтому мой встроенный JSON содержит много нулевых значений. Должен ли я опубликовать новый вопрос SO для этого, может быть? –

+1

Проблема была исправлена ​​в версии thymeleaf 3.0.0 –

0

Другой вариант:

при установке ListObject в контексте thymeleaf, установите его в строку, которая получается путем преобразования ListObject в строку JSON с помощью Джексона

затем использовать JS Eval() или лучший метод - JSON.parse для преобразования строки в объект JS.