80.参考: Spring MVCのJSPタグリファレンス

概要

Spring MVCのJSPタグについて見ていきます。

Spring MVCが用意するViewで使用できるタグは、FreeMarkerやVelocityなどでも使用できますが、

すべて使い方は同じなのでJSPタグのみを見ていきます。

Spring MVCのタグライブラリの基本

タグライブラリの基本については、以下の記事を参照ください。

参考: 11.JSPファイルのタグについて

ここではタグを1つずつ見ていきます。

最初にモデルデータクラスを示してからタグを見ていく形をとります。

タグライブラリのリファレンス

Javaコード側のサンプル

【モデルデータのサンプル】

public static class Form{

@Valid

private User user;

private boolean isSmile = false;

private String[] optionList = {"増量", "スープ", "オシャ僧"};

private String[] optionValues;

private Map<String, String> menuMap = new HashMap<String, String>();

public Form() {

menuMap.put("1", "カレー");

menuMap.put("2", "うどん");

menuMap.put("3", "肉まん");

}

public User getUser() {

return user;

}

public void setUser(User user) {

this.user = user;

}

public Map<String, String> getMenuMap() {

return menuMap;

}

public String[] getOptionList() {

return optionList;

}

public String[] getOptionValues() {

return optionValues;

}

public void setOptionValues(String[] optionValues) {

this.optionValues = optionValues;

}

public void setSmile(boolean isSmile) {

this.isSmile = isSmile;

}

public boolean isSmile() {

return isSmile;

}

}

モデルデータは、実践ではstaticにするもの、DBから取得するものなどがあり、考慮が必要です。

ここではJSPタグのサンプルのためだけに記述していますので、実践にそぐわない書き方をしていることにご注意ください。

【補足】

上記のうち、menuMapプロパティと、optionListプロパティは項目名のマップのようなものです。

form:inputタグ

【イメージ例】

【JSP記述例】

<form:input path="user.age"/>

【説明】

path属性にモデルデータのプロパティを記述すると、その値がtextボックスとして出力されます。

Binderで設定した書式なども反映されます。

form:checkboxタグ

【イメージ例】

【JSP記述例】

<form:checkbox path="smile"/>スマイル(0円)<br>

【説明】

path属性にモデルデータのプロパティを記述すると、その値がcheckboxとして出力されます。

モデルデータの定義を見ていいただくと分かりますが、プロパティの型はbooleanにします。

form:checkboxesタグ

【イメージ例】

【JSP記述例】

<form:checkboxes items="${form.optionList}" delimiter="<br>" path="optionValues"/><br>

【説明】

items属性にMapかList、配列を設定できます。上記の例では配列を指定しています。"増量"などの配列の文字列が表示名になります。

pathにはモデルデータのプロパティ名を指定します。ブラウザからパラメタを受け取ると、チェックされた値が配列で設定されます。

items属性にMapを指定した場合は、キーがcheckboxのvalueに使用されて、Mapの値が表示名になります。

delimiter属性はitemsを出力するときの区切り文字を指定します。省略すると特に区切り文字は出力されません。

【補足】

以下の記述でも上記のイメージと同じ表示になります。

<form:checkbox path="optionValues" value="1"/>増量<br>

<form:checkbox path="optionValues" value="2"/>スープ<br>

<form:checkbox path="optionValues" value="3"/>オシャ僧<br>

【補足2】

checkboxesのような複数のコントロールを1つにまとめたタグは他にも存在しますが、特徴があります。

以下のような自身のoptionValuesと無関係のhiddenタグを記述することです。

<input type="hidden" name="_optionValues" value="on"/>

なぜこのようなタグを記述するかというと、WEBパラメタの特性に関係しています。

例えば上記のチェックボックスで1つでもチェックすればoptionValues=1のようなパラメタが渡ってきます。

しかし、チェックボックスが1つもチェックされていないとどうでしょうか?

optionValuesパラメタ自体が渡ってこないので、「チェックがされなかったのか?」「そもそも画面にチェックボックスが表示されていなかったのか?」が

分かりません。

しかし、_optionValuesパラメタが渡ってくることで「チェックがされなかった!」と分かります。

この場合は空の配列がformに設定されます。

もしこの_optionValuesパラメタが渡ってこない場合はformのoptionValuesプロパティにはNULLが設定されることになります。

いろいろ気を使ってくれていて、こういうところはかなり良いと思います。

form:radiobuttonタグ

【イメージ例】

【JSP記述例】

<form:radiobutton path="optionValues" value="1"/>増量<br>

<form:radiobutton path="optionValues" value="2"/>スープ<br>

<form:radiobutton path="optionValues" value="3"/>オシャ僧<br>

【説明】

path属性にモデルデータのプロパティを記述すると、その値がradioボタンとして出力されます。

form:radiobuttonsタグ

【イメージ例】

【JSP記述例】

<form:radiobuttons delimiter="<br>" items="${form.optionList}" path="optionValues"/><br>

【説明】

path属性にモデルデータのプロパティを記述すると、その値がradioボタンとして出力されます。

items属性には、Map、List、配列を指定できます。上記では配列を指定しています。

内容はform:checkboxsタグと同じですので、そちらの説明をご覧ください。

form:selectタグ

【イメージ例】

【JSP記述例1】

<form:select items="${form.optionList}" path="optionValues"/><br>

【JSP記述例2】

<form:select items="${form.menuMap}" path="optionValues"/><br>

【説明】

path属性にモデルデータのプロパティを記述すると、その値が選択された状態で、selectとして出力されます。

items属性はform:checkboxsなどと同じですので、そちらの説明をご覧ください。

【multiple属性について】

<form:select items="${form.optionList}" multiple="false" path="optionValues"/><br>

multiple属性は複数選択可能なselectを出力するかを設定します。

デフォルトはtrueです。

form:optionタグ/form:optionsタグ

【イメージ例】

【JSP記述例】

<form:select path="optionValues" multiple="false">

<form:option value="-" label="--Please Select"/>

<form:options items="${form.menuMap}" />

</form:select><br>

【説明】

form:optionタグなどを使用すると、上記のイメージのように自由に項目を追加できます。

Created Date: 2012/04/17