0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

📘 Vol.8.0:【Struts2】OGNL入門 〜タグライブラリを支える最重要基礎技術〜

Last updated at Posted at 2025-05-21

本記事は、Struts2でJSPを書く際に頻出するタグの基本を網羅する
📘「Vol.8.0〜8.7:Struts2 タグライブラリ入門編(基本操作・最低限の知識)」 シリーズの一部です。

✅ はじめに

Struts2のJSP開発で頻繁に登場する <s:〜> タグたち。その中で欠かせない「共通言語」が OGNL(Object Graph Navigation Language) です。

本記事は、Struts2タグライブラリ徹底解説シリーズ「Vol.8」の基礎として、タグを深く理解するための OGNL入門ガイド となっています。


🔍 OGNLとは?

  • Object Graph Navigation Language の略。
  • Javaオブジェクトの プロパティを文字列ベースで辿るための式言語
  • Struts2では、ほぼすべての <s:〜> タグの中で使われています。
<s:property value="user.name" />

この user.name の部分が OGNL式 です。


🧠 どう使われるのか?

Struts2のタグライブラリでは、主に次の用途でOGNLが使われます:

用途 説明
プロパティ参照 user.name JavaBeanのプロパティ呼び出し
条件分岐 user.age > 18 比較や論理式にも使える
メソッド呼び出し user.getName() Javaメソッドも呼び出せる
リストアクセス users[0].name 配列やListの要素参照
マップアクセス settings['lang'] Mapのキーアクセス

📘 ValueStackとの関係

Struts2では、アクションやモデルのオブジェクトは ValueStack(値スタック) という構造で管理されます。

OGNL式はこのValueStackの中にあるオブジェクトに対して評価されるため、 直接セッターやゲッターを書かなくてもアクセス可能 になります。

public class User {
    private String name;
    public String getName() { return name; }
}

public class SomeAction extends ActionSupport {
    private User user = new User();
    public User getUser() { return user; }
}
<!-- user.getName() と等価 -->
<s:property value="user.name" />

🔑 よく使うOGNL式(チートシート)

<s:property value="user.name" />         <!-- プロパティ表示 -->
<s:if test="user.age >= 18">OK</s:if>    <!-- 条件式 -->
<s:property value="items[0].title" />    <!-- 配列/List要素 -->
<s:property value="map['key']" />        <!-- Mapキーアクセス -->
<s:property value="user.getName()" />    <!-- メソッド呼び出し -->
<s:property value="name?.toUpperCase()" /> <!-- nullセーフ演算子(OGNL 3.x) -->

🚫 よくあるエラー

エラー 原因
No property found for xxx プロパティ名のスペルミス、もしくはgetter未定義
Cannot invoke method publicメソッドでない or 引数ありのメソッド呼び出し
空白ページになる OGNL式評価に失敗して出力されない(null)

💡 実務Tips

  • フォーム送信時にもOGNLが裏で使われており、name="user.name" のようなバインディングが可能。

  • 条件式に文字列比較や複雑なロジックを入れるときは、タグではなくJava側で処理した方が可読性が高まる。

  • OGNL式はテンプレートに埋め込めるが、過度なロジックは避けるのが実務流儀。


🧩 本シリーズとの位置づけ

このOGNL入門は、以下のStruts2タグを理解するための 「基礎体力」 です。

  • s:property, s:if, s:iterator, s:select

  • s:set, s:push, s:include, s:action

  • s:form, s:textfield, s:token など

Vol.8.1以降の記事を読む前にぜひ抑えておきたい内容!


📝 まとめ

ポイント 内容
OGNLとは Javaオブジェクトを式で参照する仕組み
Struts2との関係 ValueStack上のデータをタグで操作するために使う
書き方 user.nameitems[0].title など
実務Tips わかりやすく、使いすぎないのがポイント

▶️ 次回予告

次は改めて「📘 Vol.8.1」として、Struts2タグライブラリの全体像と種類を解説します!


📚 関連記事(Vol.8シリーズ)


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?