<c:if> 条件分岐するJSP標準タグライブラリ(JSTL)

JSTL (JSP Standard Tag Library)における <c:if> タグは、指定された条件式を真 (true)と評価した場合にのみ、その内容をHTMLに出力する。

タグ

<c:if test="condition">
  contents
</c:if>

test属性には、判定条件をEL式で指定する。

条件の判定結果が真であれば、HTMLcontentsが出力される。

属性

<c:if>タグには、次の属性を指定できる。

scope

scope属性にはスコープ(変数の有効範囲)を指定する。

属性値 変数の有効範囲
page JSPページ
request HTTPリクエスト
session HTTPセッション
application Webアプリケーション

scope属性にpageを指定すると、変数はこのJSPページでのみ有効になり、他のJSPページと共有することができなくなる。page暗黙オブジェクトのgetAttributeメソッドで変数の値を取得することができる。

page scope
Figure 1. page scope

scope属性にrequestを指定すると、変数はこのリクエストで有効になり、1回のリクエストで情報を共有することができる。request暗黙オブジェクトのgetAttributeメソッドで変数の値を取得することができる。

request scope
Figure 2. request scope

scope属性にsessionを指定すると、変数はこのセッションで有効になり、複数のリクエストを跨いで共有することができる。session暗黙オブジェクトのgetAttributeメソッドで変数の値を取得することができる。

session scope
Figure 3. session scope

scope属性にapplicationを指定すると、変数はWebアプリケーションで有効になり、Webアプリケーション全体で共有することができる。application暗黙オブジェクトのgetAttributeメソッドで変数の値を取得することができる。

application scope
Figure 4. application scope
var

var属性に変数名を指定すると、test属性に指定した条件式の判定結果がその変数に格納される。

var属性
変数の値 説明
true test属性に指定された条件式の判定結果が真
false test属性に指定された条件式の判定結果が偽

複数条件を判定する

JSTLの<c:if>タグで複数条件を判定するには、EL式のandやorを使う。

<c:if test="${length >= 4 and length <= 16}">
  正しい長さです。
</c:if>
<c:if test="${length > 16 or length < 4}">
  短すぎるか長すぎます。
</c:if>

nullを判定する

変数が空文字またはNULLかどうかを判定するには、emptyを使う。

<c:if test="${empty var}">
  var is empty or null.
</c:if>

変数が空文字またはNULLではないかどうかを判定するには、not empty又は!emptyを使う。

<c:if test="${not empty var}">
  var is not empty or null.
</c:if>
<c:if test="${!empty var}">
  var is not empty or null.
</c:if>

変数をトリム(前後の空白を削除)してから空文字またはNULLかどうかを判定するには、fn:trim()を使う。

<c:if test="${empty fn:trim(var)}">
  trimmed var is empty or null.
</c:if>

文字列を比較する

Javaで文字列比較するには String クラスのequalsメソッドを使用するが、JSTLの<c:if>タグはEL式の等価演算子(==)で文字列比較できる。

<c:if test="${var1 == '文字列1'}">
  文字列が一致しました。
</c:if>

else

汎用プログラミング言語のif文には、条件が偽の場合を表すelseがある。しかし、JSPのif文にはelseは無い。

JSPで条件により複数分岐させる場合は、<c:if> ではなく <c:choose> を使う。

JSP

JSP (JavaServer Pages) には、他にも次のJSP標準タグライブラリ(JSTL)がある。

JSPには次のディレクティブがある。

JSPには次のアクションタグがある。