JSTL リファレンス

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

SYNOPSIS

<c:catch
var="変数名"
>
例外の発生する可能性のあるブロック.
</c:catch>

説 明

タグ内部で発生したすべての例外を catch できます。これは以下のコードに相当します。

Java
try{
    …
} catch(Throwable ex){
    pageContext.setAttribute(var, ex);
}

var 属性を省略した場合、catch した例外はどこにも格納されません。

属 性

var="変数名"
optional

catch した例外を格納する変数名です。

後続の処理で <c:if test="${not empty ex}"> を評価すれば 例外が発生していたかどうかを判断することができます。 例外が発生せずにタグ内を抜けた場合はこの変数の既存値は削除されます。

例外が発生せずにタグ内の評価が完了した場合、この変数はクリアされます。

内 容

例外の発生する可能性のあるブロック。

使用例

<c:catch> 内で意図的に NullPointerException を発生させて その例外のクラス名を出力します。
JSP
<c:catch var="ex">
  <% ((String)null).toString(); %>
</c:catch>
<c:if test="${not empty ex}">
  ERROR: <c:out value="${ex.class.name}" />
</c:if>
実行結果
ERROR: java.lang.NullPointerException
1 から 5 まで偶数の場合にのみ例外を発生させます。 変数のクリアは行っていませんが、同名の変数名を使用しても前回の例外に影響されません (<c:catch> を正常に抜ける時に自動でクリアされます)。
JSP
<c:forEach var="i" begin="1" end="5">
  <c:catch var="ex">
    <c:if test="${i%2==0}"><% ((String)null).toString(); %></c:if>
  </c:catch>
  <c:if test="${not empty ex}">
    ERROR[${i}]: <c:out value="${ex}" /><br>
  </c:if>
</c:forEach>
実行結果
ERROR[2]: java.lang.NullPointerException
ERROR[4]: java.lang.NullPointerException
CVS 2008/03/09