11.JSPファイルのタグについて
概要
Spring MVCでは、JSPファイルで使用できるタグがいくつか用意されています。
(もちろんFreeMarkerやVelocityでも使用できますが、同じですのでJSPタグを見ていきます。)
しかし、ここではそれらのリファレンスを見るのではなく、考え方を見ていきます。
Spring MVCのJSPタグの考え方
正直Spring MVCのタグは多彩ではありません。
それはSpringの方針で、他に存在するタグフレームワークを最大限に利用するためです。
例えば、Struts2では多彩なタグが用意されていますが、あまりにもStruts2のActionと依存関係があるため
Struts2以外のタグライブラリが使いにくくなっています。
使えないわけではないですが、おそらく期待した結果と違う動きになったりする可能性があります。
それに比べSpringの場合は、単純にJSPの流儀に従っているので、c:タグや、fmt:タグなどを普通に使っていけます。
世の中には他にも、検索結果のページングを表示するフレームワークなど、いろいろありますが
おそらくどのフレームワークも使えるかと思います。
JSPタグの種類
Spring MVCで用意している主なタグは2つだけです。
【宣言の例】
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
formタグ
formタグは、SpringのControllerと結びついているタグです。
form:input、form:checkboxなど、実際のHTMLのコントロールを表すタグです。
そして、簡単にControllerで作成したModelと結び付けられます。
【サンプル】
<form:form action="confirm.html" method="POST" modelAttribute="form">
<form:hidden path="user.id"/>
<table border="1">
<tr>
<th><spring:message code="model.user.name" /><br></th>
<td><spring:bind path="user.name">${status.value}</spring:bind><br></td>
</tr>
<tr>
<th><spring:message code="model.user.age"/><br></th>
<td><form:input path="user.age"/><br><form:errors path="user.age" cssStyle="color:red"/></td>
</tr>
<tr>
<th><spring:message code="model.user.upDate"/><br></th>
<td><form:input path="user.upDate" maxlength="10"/><br><form:errors path="user.upDate" cssStyle="color:red"/></td>
</tr>
</table>
<br>
<input type="submit" value="確認" />
</form:form>
上記ではform:inputタグが使用されています。
name属性がないことに注目してください。最低限の属性はSpringが自動で記述してくれます。
上記の場合は以下のようにHTMLに変換されます。
【変換例】
<input id="user.age" name="user.age" type="text" value="21"/>
直観的で分かりやすいですよね。
また、この例では分かりにくいですがControllerで何かを判別できるような特殊な情報を付加することがあります。
例えばcheckboxの場合、チェックボックスを何もチェックしないとブラウザはパラメタ名すら送ってきません。
formタグは、checkboxが存在するのかどうかが分かるような情報をhiddenなどで埋め込みます。
springタグ
springタグは、formタグのようにControllerに結びつくような情報ではありません。
どちらかというと、表示のためのタグと思ってもらえればよいと思います。
上記のサンプルで、spring:message、spring:bindが使われています。
【messageタグ】
messageは、メッセージリソースから値を取り出して出力します。
【bindタグ】
bindタグはSpring独特かも知れません。
Binderのお話を以前の記事でいろいろ話してきましたが、それと関係するものです。
このタグを使用すると、Binderで設定した内容が反映されます。
例えば、日付の書式を"yyyy/MM/dd"に設定した場合、"2012/04/08"のように出力されます。
出力の仕方は、statusオブジェクト(BindStatusクラス)に値が入るので、EL式などでstatusオブジェクトから取り出す感じです。
例えば以下のようになるかと思います。
【サンプル】
<spring:bind path="user.upDate">日付:${status.value}</spring:bind>
<spring:bind path="user.upDate">日付:<fmt:formatDate value="${status.actualValue}" pattern="yyyyMMdd"/></spring:bind>
BindStatusクラスのgetValue()は、String型です。actualValueは、オブジェクトそのままがわたってくるので
上記のサンプルのようにformatDateを使用できます。
Created Date: 2012/04/08