java-beginner.com ブログ

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

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

投稿日:

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

アイキャッチ

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

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

JSTL(JSP Standard Tag Library)というライブラリにはカスタムタグが用意されたますが、そのうちのCoreライブラリにifタグが定義されています。このタグでは条件分岐をすることができます。ただし、if-elseやif-else ifという使い方は出来ないようです。

test属性

このifタグはtest属性が必須です。test=”[true/false]”という使い方をするようです。例えば以下のような使い方です。

ソース

<c:set var="num" value="1" />
<c:if test="${num == 1}">numは1です。</c:if>
<c:if test="${num == 2}">numは2です。</c:if>

結果

numは1です。 

上記のソースはsetタグでnumに1を格納しています。「${…}」の部分は式言語と呼ばれる記述です。${num == 1}では条件式「num == 1」の結果がtrueになり、ifタグの内容が出力されます。${num == 2}ではfalseになるため、ifタグの内容は出力されません。

比較演算子

式言語では以下のように比較演算子も使えます。

ソース

<c:set var="num" value="1" />
<c:if test="${num > 0}">numは1より大きいです。</c:if>

上記ではnumに数値を格納していますが、文字列を格納するとエラーになります。例えば、以下のようにnumに”a”を格納している場合はエラーが発生しました。

ソース

<c:set var="num" value="a" />
<c:if test="${num > 0}">numは1より大きいです。</c:if>

上記の場合、エラーの原因として「javax.el.ELException: Cannot convert a of type class java.lang.String to class java.lang.Long
」が出力されました。基本的にsetタグで用意した変数はStringらしく、比較演算子を使うとLong型に変換されるようです。

empty

式言語では通常の演算子が使えるようですが、ほかにも「empty [変数]」という書き方ができます。変数がnullまたは空文字の場合にtrueになります。以下のように使うことができます。

ソース

<%
String str = null;
request.setAttribute("str", str);
%>
<c:set var="myStr" value="${str}" />

<c:if test="${empty myStr}">1 strはnullです。</c:if>
<c:if test="${!empty myStr}">2 strはnullではありません。</c:if>

結果

1 strはnullです。 

上記ではString型変数strにnullを格納し、リクエストスコープに設定しています。setタグで変数myStrにリクエストスコープのstrを格納しているので、myStrの値はnullです。そのため、${empty myStr}はtrueになります。また、emptyに否定演算子が使えて、${!empty myStr}という記述ができます。