こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

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

こんにちは。「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}という記述ができます。