【Java で Webアプリ開発入門】コントローラーからビューにHTMLを渡す(Thymeleaf)
何の記事??
Spring Boot のテンプレートエンジン Thymeleaf でコントローラーからビューに HTML を渡す方法です。
本題
先述の通りコントローラーから HTML を渡したくて以下のようなコントローラーを書きました。
public ModelAndView index(ModelAndView mav){
mav.setViewName("index");
mav.addObject("msg","<h1>dummyyyy</h1><hr />");
return mav;
}
mav.setViewName("index");
mav.addObject("msg","<h1>dummyyyy</h1><hr />");
return mav;
}
Thymeleaf には
<p th:text="${msg}">message</p>
と書きました。しかし、表示には HTML がエスケープされていて HTML コードがそのまま出力されてしまいました。
解決策は、 th:utext を使用するだけ!!
Thyeleaf 側で th:text 部分を変えるだけでできました(笑)
<p th:utext="${msg}">message</p>
これでブラウザに HTML が解析された結果が表示されます。
最後に
きちんと調べれば早く済んだのに。。。無駄に試行錯誤重ねていました(笑)
しかし、th:utext は「値に HTML タグが含まれると、それがそのまま機能する」ためユーザから送信された情報をもとにテキストを作成する場合、XSS などの攻撃の対策が必要ですね。実務ではどのように使っているんだろう・・・??