java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

JSTLのCoreライブラリのchooseを使う

投稿日:

最終更新日:2016年10月08日

アイキャッチ

こんにちは。「Javaを復習する初心者」です。

JSPでJSTLというライブラリを使ってみました。今回はchooseタグを試しました。

JSTL(JSP Standard Tag Library)にはifタグが用意されてますが、if-else構文のような使い方は出来ません。そのような処理をしたい場合は、chooseタグを使います。chooseタグはCoreライブラリに定義されています。

whenタグ

chooseタグはswicth文のような使い方をします。以下のように、chooseタグ内でwhenタグを使います。whenタグにはtest属性を使います。この属性は必須です。test属性の記述がない場合、該当のJSPページにアクセスすると「TLD又はタグファイルによると、属性 test はタグ when には必須です」というエラーが出力されます。また、Eclipseのエディタ上では「必須属性 “test” が欠落しています」というエラーが出ます。

ソース

<c:set var="num" value="1" />

<c:choose>
  <c:when test="${num == 1}">numは1です。</c:when>
</c:choose>

上記の場合、${num == 1}がtrueなので「numは1です。」が出力されます。

otherwiseタグ

if-else文のような処理をしたい場合は、以下のようにotherwiseタグを使います。

ソース

<c:set var="num" value="2" />

<c:choose>
  <c:when test="${num == 1}">numは1です。</c:when>
  <c:otherwise>numは1以外です。</c:otherwise>
</c:choose>

上記の場合は「numは1以外です。」が出力されます。

whenタグを複数使う

else-if文のような処理をしたい場合はwhenタグをその分記述するだけです。例えば以下のように記述します。

ソース

<c:set var="num" value="2" />

<c:choose>
  <c:when test="${num == 1}">numは1です。</c:when>
  <c:when test="${num == 2}">numは2です。1</c:when>
  <c:when test="${num == 2}">numは2です。2</c:when>
  <c:otherwise>numは1以外です。</c:otherwise>
</c:choose>

上記の結果は「numは2です。1」です。whenタグが上から順に評価され、trueになった要素が出力されます。そのwhenタグから下の要素は評価されません。

chooseタグの内容をwhenだけで構成する場合、ifタグで記述することができますが、分岐が多岐になる場合はchooseタグを使う方が一般的のようです。逆に、分岐が一つの場合はifタグを使うを使うのが一般的のようです。

chooseタグの内容をotherwiseだけにすると、Eclipse上はエラーが出ませんでしたが、該当ページにアクセスすると500エラーになります。「下位である “when” タグのない “choose” は正しくありません」というエラーが出ました。「TagLibraryValidatorの検証エラーメッセージです 」という記述も出力されるため、記述のルールのらしいです。