LoginSignup
4
5

More than 5 years have passed since last update.

Springの<form:textarea>を使うと先頭の改行が消えていく・・・

Last updated at Posted at 2016-03-22

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が出力されます。

JSPの実装例
<form:textarea path="note" />
HTMLの出力例
<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がリリースされたのでその旨を反映
4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5