Sortie JavaScript dans Thymeleaf 3 sans échapper

A partir de Thymeleaf 3, il est possible de sortir une chaîne de caractères sans échapper en JavaScript (ou plutôt en traitement en ligne). Vous pouvez utiliser «[(...)] au lieu de« [...]] ».

Exemple

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";
}

=> Sortie [^ 1]

[^ 1]: Cet exemple personnalise ObjectMapper pour échapper à / et >. Ceci afin d'éviter les balises </ script> et ]]>.

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

Si vous passez l'objet à Thymeleaf tel quel et que vous le sérialisez, LocalDate etc. (lié à JSR-310) sera converti, mais Optional semble ne pas être pris en charge.

Bonus: paramètres de dépendance pour build.gradle

Dans le cas de la série Spring Boot 1.5, la destination de référence de spring-boot-starter-thymeleaf est Thymeleaf 2, il est donc nécessaire de spécifier la dépendance séparément.

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

Après cela, la configuration automatique fonctionne et elle le fera pour vous.

Recommended Posts

Sortie JavaScript dans Thymeleaf 3 sans échapper
Comment intégrer des variables JavaScript dans HTML avec Thymeleaf
Triangle de sortie en Ruby
Générer du JavaScript avec Thymeleaf
Sortie en multiples de 3
Utilisez thymeleaf3 avec le parent sans spécifier spring-boot-starter-parent dans Spring Boot
Essayez d'appeler JavaScript en Java
Reportez-vous à enum dans Thymeleaf
Utilisez des variables ruby en javascript.
Prend en charge 0 baisse dans la sortie CSV