JSPのEL式でオブジェクトのプロパティにアクセスする方法を初心者向けに完全ガイド!
生徒
「JSPで、オブジェクトの中の値を簡単に取り出す方法ってありますか?」
先生
「ありますよ。JSPではEL式(Expression Language)を使うと、すごく簡単にオブジェクトのプロパティにアクセスできます。」
生徒
「EL式って、${}で書くやつですよね?」
先生
「そうです。EL式を使えば、JSPでのデータ表示がとても楽になります。今日はその基本と使い方を一緒に見ていきましょう!」
1. JSPのEL式とは何か?
EL式(Expression Language)は、JavaServer Pages(JSP)でJavaのオブジェクトやプロパティに簡単にアクセスするための式記法です。${}の形で記述することで、Javaのコードを直接書かずに値を取得することができます。
例えば、スコープに保存されたオブジェクトの中のプロパティを表示するには、以下のように書きます。
<p>名前:${user.name}</p>
このように書くことで、userという名前のオブジェクトのnameプロパティにアクセスして、その値をHTMLに表示できます。
2. JavaBeansのプロパティにアクセスする方法
EL式でプロパティにアクセスするには、JavaBeansの形式でオブジェクトが設計されている必要があります。つまり、getterメソッドを持っている必要があります。
以下に、JavaBeansの例を示します。
public class User {
private String name;
private int age;
public User() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
このUserクラスのnameやageといったプロパティは、EL式で次のようにアクセスできます。
<p>ユーザー名:${user.name}</p>
<p>年齢:${user.age}</p>
3. リクエストスコープ・セッションスコープとの関係
EL式でオブジェクトにアクセスするには、オブジェクトがスコープに保存されている必要があります。主に使われるのは以下の4つのスコープです。
- pageスコープ
- requestスコープ
- sessionスコープ
- applicationスコープ
例えば、Servletで以下のようにユーザーオブジェクトをrequestスコープに保存したとします。
User user = new User();
user.setName("山田太郎");
user.setAge(25);
request.setAttribute("user", user);
この場合、JSPでは以下のようにEL式でプロパティにアクセスできます。
<p>名前:${user.name}</p>
<p>年齢:${user.age}</p>
4. プロパティがオブジェクトを含んでいる場合のアクセス
EL式では、ネストされたオブジェクトにも簡単にアクセスできます。たとえば、UserクラスにAddressクラスのプロパティがある場合を考えましょう。
public class Address {
private String city;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
public class User {
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
このとき、EL式では以下のように記述することで、都市名にアクセスできます。
<p>都市:${user.address.city}</p>
5. EL式の補足:nullの扱いやデフォルト値
EL式では、アクセスしようとしたプロパティがnullでもエラーにはなりません。その代わり、空白が表示されます。
また、nullや空文字に対してデフォルト値を設定したい場合は、empty演算子や?:演算子を使います。
<p>都市:${empty user.address.city ? '不明' : user.address.city}</p>
6. EL式で配列やリストの要素にアクセスする
EL式では、配列やListの要素にも簡単にアクセスできます。インデックスを指定することで要素を取得できます。
<p>最初の要素:${items[0]}</p>
ただし、リストの要素数よりも大きいインデックスを指定すると何も表示されないので注意が必要です。
7. Map形式のオブジェクトに対するEL式のアクセス
Mapに対してもEL式は有効です。キーを指定することで値を取得できます。
<p>値:${map['key1']}</p>
ダブルクオーテーションではなく、シングルクオーテーションを使うのがポイントです。
8. JSTLとEL式の併用でより便利に
JSPでは、EL式と一緒にJSTL(JavaServer Pages Standard Tag Library)を使うことで、条件分岐やループ処理が簡単に記述できます。
<c:if test="${user.age >= 20}">
<p>成人です。</p>
</c:if>
このように、JSTLとEL式を組み合わせれば、ロジックをJavaコードに書かずにJSPだけで表現できます。