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« [...]] ».
HTML
<script th:inline="javascript">/*<![CDATA[*/
var foo = /*[(${foo})]*/ {"bar":"drei","baz":"]]\u003e"\n'<\u002fscript\u003e"};
/*]]>*/</script>
Controller (Spring)
@GetMapping("/")
public Object index(Model model) throws IOException {
final MyForm myForm = new MyForm("", "'\"&</script>]]>", Optional.of(LocalDateTime.now()));
model.addAttribute("foo", this.objectMapper.writeValueAsString(myForm));
return "index";
}
[^ 1]: Cet exemple personnalise ObjectMapper pour échapper à /
et >
. Ceci afin d'éviter les balises </ script>
et ]]>
.
<script>/*<![CDATA[*/
var contextPath = "\/";
var foo = {"baz":"","cux":"'\"&<\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.
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