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 研修資料などに活用