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?

✅ OGNL式 一覧&条件分岐集(Struts2 実務向けリファレンス)

Last updated at Posted at 2025-05-22

Struts2で <s:if><s:elseif><s:else> を使って表示制御を行う際によく使う OGNL式パターン をまとめました。
セッション判定 / ログイン判定 / リストの有無 / 権限チェック など 、実務ですぐ使えるものを中心にしています。

🔸 基本:スコープ内の値を取得する

説明
#session.xxx セッションスコープの変数
#request.xxx リクエストスコープの変数
#application.xxx アプリケーションスコープの変数
#parameters.xxx リクエストパラメータ

🔸 値の比較・一致チェック

OGNL式 説明
#session.loggedInUser.user_id == 'admin' ユーザーIDが "admin"
#session.role == 'manager' ロールが "manager" のユーザー
thread.user_id == #session.loggedInUser.user_id スレッドの作成者か判定
flag == true フラグがtrueの場合
status != 'deleted' 削除されていない状態か

🔸 null / 空チェック

OGNL式 説明
#session.xxx != null セッションに値があるか
someList != null && someList.size > 0 リストが存在し、空でない
str != null && !str.trim().isEmpty() 文字列がnull・空白でない
str?.length > 0 (簡易)nullセーフで文字列長チェック

🔸 数値・サイズ判定

OGNL式 説明
list.size > 0 リストが空でない
count >= 10 件数が10件以上か
user.age >= 18 年齢が18歳以上か
price * quantity > 1000 数値の演算も可能

🔸 日付・フォーマット(応用)

OGNL単体では複雑な日付計算は非推奨ですが、サーバー側で整形済みの値を比較するのがベスト。

<s:if test="%{#session.today == item.expireDate}">
    本日が有効期限です
</s:if>

🔸 booleanフラグ判定

OGNL式 説明
isEditable == true 編集可能か
hasPermission == false 権限がない

🔸 ネスト&論理式の活用

OGNL式 説明
#session.user != null && #session.user.role == 'admin' ユーザーが存在し、かつ管理者
`thread.user_id == #session.loggedInUser.user_id #session.role == 'admin'` 作成者または管理者

🔸 文字列の部分一致(contains)

<s:if test="%{'admin' in #session.loggedInUser.role}">

🔸 三項演算的なOGNL式

<s:property value="isAdmin ? '管理者' : '一般ユーザー'" />

🔸 リストの中に特定の値が含まれるかの判定

<s:if test="%{#session.roles.contains('manager')}">

🔧 補足:デバッグ表示タグ

開発中にスコープの変数や値を確認したいときは以下を使います。

<s:debug />

※ デバッグ表示は 開発環境のみ に限定してください。
 本番環境で出すと機密情報が見えてしまいます!


🧩 組み合わせ例(実務向け)

<!-- ログイン済みかつ、管理者だけがボタンを表示 -->
<s:if test="%{#session.loggedInUser != null && #session.loggedInUser.role == 'admin'}">
    <s:submit value="管理者設定" />
</s:if>
<!-- スレッド作成者または管理者に編集ボタンを表示 -->
<s:if test="%{#session.loggedInUser.user_id == thread.user_id || #session.loggedInUser.role == 'admin'}">
    <s:form action="EditThread">
        <s:hidden name="thread_id" value="%{thread_id}" />
        <s:submit value="スレッド編集" />
    </s:form>
</s:if>

📘 この資料の使い方

  • Qiita記事に「折りたたみボックス」や別ファイルでリンクして併用

  • プロジェクト内の「OGNLパターン集」として共有化

  • 新人向けの Struts2 研修資料などに活用


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?