Java好き

カテゴリ: JavaEE

ELは、スクリプトレット(<% %>)やJSP式(<%= %>)より簡素にかけるようにしたもの。
JSTLと組み合わせることで、基本的な出力はほとんど対応可能。

スポンサードリンク

基本

${expr}で記述

例えば、次のクラスのオブジェクトをELで表現すると次のようになる。

${member.name}

スクリプトレット(<% %>)やJSP式(<%= %>)より簡素にかけるようにしたものがEL。
JSP等でタグにタグを重ねることにならないので見た目もマシ。

page→request→session→applicationの順でオブジェクトを検索

サーブレットでは、値を保持する場合スコープがある。

通常はスコープを意識しなくてはいけないが、ELではこのような順で自動的に検索される。
よって、特にスコープを意識しなくても出力可能。(名前がかぶらなければ)

サーブレット側

HttpSession session = request.getSession();
session.setAttribute("sessionStr", "Hello World From Session Scope");
request.setAttribute("requestStr", "Hello World From Request Scope");

JSP側

<% pageContext.setAttribute("pageStr", "Hello World From Page Scope"); %>
<p>${sessionStr}</p>
<p>${requestStr}</p>
<p>${pageStr}</p>

出力

<p>Hello World From Session Scope</p>
<p>Hello World From Request Scope</p>
<p>Hello World From Page Scope</p>

nullは空白になる

nullのものを出力しようとした場合は空白になる。
また、途中のオブジェクトがnullであっても例外にはならずに空白になる。

ただし、存在しないものを指定した場合や、例外が発生した場合、例外になる。

演算子とリテラル

Javaと基本的なところは同じ、ただ若干解釈が異なったり独自のものもある。

「==」「!=」

「==」「!=」は、Javaでは参照先が同じ場合trueですが、ELでは異なります。
ELにおける「==」「!=」の考え方は、型変換後にequals()を呼び出すことになります。

<%
  pageContext.setAttribute("nullValue", null);
  pageContext.setAttribute("emptyStr", "");
  pageContext.setAttribute("helloStr", "hello");
  pageContext.setAttribute("helloStr2", "hello");
%>
 
<p>${nullValue == ""}</p>
<p>${emptyStr == ""}</p>
<p>${helloStr == "hello"}</p>
<p>${helloStr == helloStr2}</p>

出力

<p>false</p>
<p>true</p>
<p>true</p>
<p>true</p>

empty

ELでは「null」というリテラルがないので、nullを条件として評価したいときはemptyを使います。
そのほかに「""」やコレクションのが空の場合も、trueを返します。

暗黙オブジェクト

JSP同様、暗黙オブジェクトを利用できます。

暗黙オブジェクト一覧
暗黙オブジェクト 説明
pageContext PageContextオブジェクト
pageScope ページスコープの属性Map
requestScope リクエストコープの属性Map
sessionScope セッションスコープの属性Map
applicationScope アプリケーションスコープの属性Map
param パラメータのMap
paramValues 複数値を持つリパラメータを格納するString型配列
header リクエストヘッダーのMap
headerValues 複数値を持つリクエストヘッダーを格納するString型配列
cookie クッキーのMap
initParam コンテキスト初期化パラメータを格納するMap

標準タグライブラリ。
ELと組み合わせることで基本的な出力は対応可能。

JSPでは「&lft;jsp:…」から始まる標準アクションのほかに、
タグライブラリ(カスタムタグの集まり)を定義することができる。

そのタグライブラリにおいて、
一般的によく使われる汎用的な機能を提供するタグを
J2EEの方でまとめたものがJSTL。

ここではJSTLのよく使うタグをまとめる。

基本

c:out

出力を行うタグ。

<c:out value="${valueStr}" />

ELをそのまま記述しても同じような出力をするので無用に思われるかもしれないが、
defaultを設定できたり、xml用のエスケープをしてくれる。

条件

c:if

Javaのif文に相当。

testが「true」のときに、
タグの中身が評価されるタグ。

<c:if test="${condition}">
    
</c:if>

c:choose c:when c:otherwise

Javaのif-else文に相当。

<c:choose>
  <c:when test="${condition}">
    
  </c:when>
  <c:otherwise>
    
  </c:otherwise>
</c:choose>

イテレーション

c:forEach

Javaのfor文に相当。

Iteratorや配列やMapを
回すことができる。

下記の例のように、
varStatusに変数を指定するとループに関する情報が取得できる。

<c:forEach var="member" items="${members}" varStatus="status">
    
</c:forEach>

url

c:url

URLを生成するためのタグ。

パラメータが多い場合などは「c:param」を追加していくだけなので
きれいに記述できる。

また、URLエンコードも行われる。

<c:url var="urlLink" url="xxxx.jsp">
    <c:param name="paramA" value="valueA" />
</c:url>

フォーマット

fmt:formatNumber

JavaSEのNumberFormatに相当。

<fmt:formatNumber value="${xxxNumber}" pattern="0.00" />

fmt:formatDate

JavaSEのDateFormatに相当。

<fmt:formatDate value="${xxxDate}" pattern="yyyy年MM月dd日" />