
EL式は、簡潔な表現でオブジェクトにアクセスができる言語です。
具体的な使い方について解説してきます。
基本的なEL式の構文
基本的には、「${~}」という構文を使います。
文字列を出力する場合
${"HelloWorld"}
ダブルコーテーションで囲うか、シングルコーテーションで囲います。
数字を出力する場合
${123}
数字の場合は、コーテーションで囲う必要がありません。
スクリプトレットで同じことをしようとした場合
スクリプトレットで同じことをしようとした場合は、それぞれ下記のようになりますので、記述がだいぶ簡潔になっていることがわかります。
<% out.print("HelloWorld"); %>
<% out.print(123); %>
オブジェクト(スコープ変数)へのアクセス
スクリプトレットで、リクエストスコープに格納した値にアクセスする場合は、下記のように記述しました。
<% out.print(request.getAttribute("name")); %>
EL式では、下記のようになります。
${name}
検索される変数のスコープの仕様について
なお、スコープにも色々と種類があったかと思いますが、下記のように狭い方から順番に検索されます。
nullについて
JavaBeansへのアクセス
例えば、下記のようにスクリプトレットで、JavaBeansのプロパティへアクセスしようとしているソースがあった場合は、下記のようにごちゃごちゃなソースコードになってしまいます。
|
1 |
<strong>bean.jsp</strong> |
<%@page contentType="text/html; charset=UTF-8" %>
<%@page import="bean.*" %>
<HTML>
<HEAD>
<TITLE>BeanTest</TITLE>
</HEAD>
<BODY>
<% TestBean bean = new TestBean(); bean.setName("太郎"); request.setAttribute("bean",bean); %>
名前は、<% out.print(((TestBean)request.getAttribute("bean")).getName()); %>です。
</BODY>
</HTML>
TestBean.java(JavaBeans)
package bean;
public class TestBean {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
EL式に直すと、下記のように非常に簡素な形で、JavaBeansにアクセスすることができます。
名前は、${bean.name}です。
ただ、注意点としては、JavaBeansから、ゲッターメソッドを削除してしまうとEL式がエラーになってしまうので、必ずゲッターメソッドを記述するようにしましょう。
EL式の暗黙オブジェクト
EL式にも、通常のJSPとは別にEL式専用の暗黙オブジェクトがあります。
EL式の暗黙オブジェクトの一覧です。
| 名前 | 説明 |
|---|---|
| pageContext | PageContextオブジェクト |
| pageScope | ページスコープのMap |
| requestScope | リクエストスコープのMap |
| sessionScope | セッションスコープのMap |
| applicationScope | アプリケーションスコープのMap |
| param | リクエストパラメータのMap |
| paramValue | 複数の値を持つリクエストパラメータのMap |
| header | ヘッダのMap |
| headerValue | 複数の値を持つヘッダのMap |
| initParam | 初期パラメータのMap |
| cookie | クッキーの名前と値のMap |
例えば…
リクエストスコープの暗黙オブジェクトから、値を取得する場合は下記のように記述します。
|
1 |
{$requestScope.(値)} |
EL式で、条件分岐や、ループ文を使うには?
EL式の制約として、スクリプトレット内(<% ~ %>)では使用できない点というのがあります。(もし、スクリプトレット内で使ってしまうとエラーになってしまいます。)
もし、EL式で、繰り返し分や、条件分岐を使いたい場合は、JSTLというカスタムタグを使うことになります。
JSTLの使い方については下記の記事で解説しています。







この記事へのコメントはありません。