Springの<form:textarea>
タグ(JSPタグ)を使用すると、「ある操作」を行うと先頭の改行文字が消えていくことがあります。
「ある操作」とは、以下のようなごくごく一般的な操作です。
- 入力画面でテキストエリアに「(改行)テスト」と入力する。 ※「(改行)」は実際には改行コード(CRLF)です。
- 確認画面を表示する。
- 入力画面に戻る。
すると、入力画面のテキストエリアに表示される値が「テスト」になり、先頭の改行が消えてしまいます。
この事象は、**Spring Framework 4.2.6.RELEASE(2016/5/6リリース)**で解決されました。
詳しくは、https://jira.spring.io/browse/SPR-13503 を参照ください。
Note: FreeMarkerとVelocityのマクロ
SpringはFreeMarkerとVelocity用のマクロも提供していますが、こちらも同様の問題があります。
↓
FreeMarkerとVelocityもSPR-13503で一緒に対応されます。
改行コードが消えていく理由
Spring Framework 4.2.5.RELEASEまでは、以下のようなHTMLが出力されます。
<form:textarea path="note" />
<textarea id="id" name="note">
テスト</textarea>
このHTMLをブラウザで表示すると、残念ながら先頭の改行コードはレンダリングされず、ブラウザ上から改行コードが消えてしまいます。
改行コードが消えないようにするには?
先頭の改行を残すためには、以下のようなHTMLを出力する必要があります。
<textarea id="id" name="note">
テスト</textarea>
Thymeleaf(Thymeleaf-Spring)での対応
Thymeleaf(Thymeleaf-Spring)を使う場合も、この事象に対する対策が必要になります。
単純に、
<textarea id="note" th:filed="*{note}"></textarea>
とすると残念ながらアウトで、以下のように実装する必要があります。
<textarea id="note" name="note">
<span th:text="*{note}" th:remove="tag"></span></textarea>
ポイントは、
-
<textarea>
の最後に明示的に改行を入れる -
<textarea>
の中に<span>
や<p>
タグを設けてth:text
属性を使って値を出力する -
th:remove="tag"
を指定して<span>
や<p>
タグを消す(タグの中は残す)
なのですが、HTMLをブラウザでレンダリングするとテキストエリアの中に<span>
や<p>
タグが表示されちゃいます・・・。
たぶん、もっとよいやり方があるんだろうな・・・
この事象は、**Thymeleaf-Spring 3.0.0.BETA03, 2.1.5(2016/7/11)**で解決されました。
詳しくは、 https://github.com/thymeleaf/thymeleaf-spring/issues/103 を参照してください。 (2016/7/18)
まとめ
Springの<form:textarea>
を使っている場合は、Spring Framework 4.2.6.RELEASEにバージョンアップしましょう!!
この事象はSpringに特化した話ではないので、<textarea>
を使っている場合は、同じ事象が発生しないか確認した方がいいと思います。
課題
Thymeleaf(Thymeleaf-Spring)での対応方法・・・
https://github.com/thymeleaf/thymeleaf-spring/issues/103 を発行してみた。
↓
対応されました。 (2016/4/18)
変更履歴
- 2016/3/23 01:59 Thymeleafの話題を追加
- 2016/3/23 02:12 FreeMarkerとVelocityの話題を追加
- 2016/3/23 03:10 ThymeleafのIssueリンクを追加
- 2016/3/23 20:30 FreeMarkerとVelocityのマクロも4.2.6で対応される旨を追記
- 2016/4/18 02:42 Thymeleaf-Spring 3.0.0.BETA03, 2.1.5で対応される旨を追記
- 2016/5/06 19:48 Spring Framework 4.2.6.RELEASEがリリースされたのでその旨を反映
- 2016/7/18 09:15 Thymeleaf-Spring 2.1.5.RELEASEがリリースされたのでその旨を反映