JSTL リファレンス

<c:choose>
xmlns:c="http://java.sun.com/jsp/jstl/core"

SYNOPSIS

<c:choose>
<c:when> * -  if または else if に相当します.
<c:otherwise> ? -  else 文に相当します.
</c:choose>

説 明

内包する <c:when>, <c:otherwise> のうち、条件に一致した ひとつを評価するタグです。プログラミング言語における if-elseif-else を表現しています。

else や if else が不要であれば <c:if> を使用したほうがすっきり記述できます。 また単純な条件と出力であれば EL の 3 項条件演算子で代用することが出来ます。

内 容

if または else if に相当します。 複数指定された場合は上から順番に評価され、最初に真と評価されたタグの内部のみが出力されます。
else 文に相当します。 全ての <c:when> 条件と一致しなかった場合に出力されます。 不要な場合は省略することが出来ます。

使用例

現在時刻によってメッセージを切り替えます。
JSP
<jsp:useBean id="current" class="java.util.Date" />
<c:choose>
    <c:when test="${current.hours<3}">こんばんは</c:when>
    <c:when test="${current.hours<10}">おはよう</c:when>
    <c:when test="${current.hours<18}">こんにちは</c:when>
    <c:otherwise>こんばんは</c:otherwise>
</c:choose>
条件ブロック内には JSP 構文や他の拡張タグを記述することができます。 リクエストパラメータ foo の入力が省略されている場合は "default-value" が 入力されたのと同じ動きをします。
JSP
<c:choose>
  <c:when test="${not empty param['foo']}">
    <c:set var="foo" value="${param['foo']}" />
  </c:when>
  <c:otherwise>
    <c:set var="foo" value="default-value" />
  </c:otherwise>
</c:choose>
<c:choose> はある程度まとまったブロックを条件分岐するのに向いています。 属性値の一部のみを書き換えるなど、細かな部分での条件は 3 項演算子を使用した方が読みやすい 場合も多々あります。
JSP
<span style="color:${value<0? 'red': 'black'};">
<fmt:formatNumber value="${value}" type="currency" />
</span>
同じ処理を <c:choose> で記述すると冗長すぎて可視性が悪くなります。
JSP
<span style="color:<c:choose>
    <c:when test="${value<0}">red</c:when>
    <c:otherwise>black</c:otherwise>
</c:choose>">
<fmt:formatNumber value="${value}" type="currency" />
</span>
CVS 2008/03/09