Geben Sie JavaScript in Thymeleaf 3 aus, ohne zu entkommen

Ab Thymeleaf 3 ist es möglich, eine Zeichenfolge auszugeben, ohne in JavaScript (oder vielmehr inline-Verarbeitung) zu maskieren. Sie können "[(...)]" anstelle von "[...]]" verwenden.

Beispiel

HTML

<script th:inline="javascript">/*<![CDATA[*/
  var foo = /*[(${foo})]*/ {"bar":"drei","baz":"]]\u003e&quot;\n'<\u002fscript\u003e"};
/*]]>*/</script>

Controller (Spring)

@GetMapping("/")
public Object index(Model model) throws IOException {
  final MyForm myForm = new MyForm("", "'\"&amp;</script>]]>", Optional.of(LocalDateTime.now()));
  model.addAttribute("foo", this.objectMapper.writeValueAsString(myForm));
  return "index";
}

=> Ausgabe [^ 1]

[^ 1]: In diesem Beispiel wird ObjectMapper so angepasst, dass / und > maskiert werden. Dies dient dazu, das Tag << / script> und]]> `zu vermeiden.

<script>/*<![CDATA[*/
  var contextPath = "\/";
  var foo = {"baz":"","cux":"'\"&amp;<\u002Fscript\u003E]]\u003E","datetime":"2017-10-16T23:26"};
/*]]>*/</script>

Wenn Sie das Objekt unverändert an Thymeleaf übergeben und serialisieren, wird LocalDate usw. (bezogen auf JSR-310) konvertiert, Optional wird jedoch anscheinend nicht unterstützt.

Bonus: Abhängigkeitseinstellungen für build.gradle

Im Fall der Spring Boot 1.5-Serie ist das Referenzziel von Spring-Boot-Starter-Thymeleaf Thymeleaf 2, daher muss die Abhängigkeit separat angegeben werden.

def thymeleafVersion = '3.0.7.RELEASE'
// https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring4
compile group: 'org.thymeleaf', name: 'thymeleaf-spring4', version: thymeleafVersion
// https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf
compile group: 'org.thymeleaf', name: 'thymeleaf', version: thymeleafVersion

Danach funktioniert AutoConfiguration und erledigt dies für Sie.

Recommended Posts

Geben Sie JavaScript in Thymeleaf 3 aus, ohne zu entkommen
Einbetten von JavaScript-Variablen in HTML mit Thymeleaf
Ausgabedreieck in Ruby
Generieren Sie JavaScript mit Thymeleaf
Ausgabe in Vielfachen von 3
Verwenden Sie thymeleaf3 mit parent, ohne Spring-Boot-Starter-Parent in Spring Boot anzugeben
Versuchen Sie, JavaScript in Java aufzurufen
Siehe Aufzählung in Thymeleaf
Verwenden Sie Ruby-Variablen in Javascript.
Unterstützt 0 Abfall der CSV-Ausgabe