🔗 「Vol.8.9〜:Struts2 タグライブラリ応用編(実務/初級応用)」シリーズのはじまりです!
💡「Vol.8.0〜8.8:Struts2 タグライブラリ入門編(基本操作・最低限の知識)」は前回で完結しています。
✅ 今回のテーマ
Struts2のUIタグライブラリの中でも、
「ユーザーやデータの状態に応じて、ボタンや入力欄などの表示を切り替える」
といった 「表示制御」 の技術は、実務でもよく登場します。
そこで今回は以下のポイントを扱います。
-
/ を使った条件分岐
-
OGNL式による柔軟な判定ロジック
-
実プロジェクトでの活用例(「編集ボタン」の表示制御など)
1. <s:if> / <s:else>
の基本構文
<s:if test="%{ 条件式 }">
<!-- 条件が true の場合に表示 -->
</s:if>
<s:else>
<!-- 条件が false の場合に表示 -->
</s:else>
たとえば、セッション内のユーザーIDが「admin」の場合にだけ表示する例:
<s:if test="%{#session.loggedInUser.user_id == 'admin'}">
<p>管理者専用メニューです</p>
</s:if>
2. OGNL式での条件判定例
Struts2タグの test
属性には OGNL (Object-Graph Navigation Language) 式が使われます。
以下は使用頻度の高い判定ロジック例です。
条件 | testの中身 | 補足 |
---|---|---|
セッションに値があるか | %{#session.xxx != null} |
セッション存在チェック |
ログインユーザーのID一致 | %{#session.loggedInUser.user_id == thread.user_id} |
編集者確認など |
リストが空かどうか | %{myList.size > 0} |
データ存在チェック |
フラグによる制御 | %{flag == true} |
サーバー側で制御しやすい |
💡補足:OGNL式でのデバッグ方法
表示がうまくいかないときは、以下のタグでスコープ内の情報を確認できます。
<s:debug />
デバッグ情報がHTMLとして出力され、変数やスコープの中身が確認できます。
※ 本番環境では絶対に出力しないでください!(セキュリティ上のリスクがあります)
3. 実践例:ログインユーザーのみ「編集ボタン」を表示する
以下は、スレッドの作成者だけに「編集ボタン」を表示する実装例です。
(本プロジェクトの threadDetailScreen.jsp
より抜粋)
<!-- 「スレッド編集」ボタン表示&非表示の判定処理 -->
<!-- ログインユーザーと、スレッド作成者が一致した場合にボタンを表示する -->
<!-- スレッド作成者の情報はThreadDetailActionクラスにて、スレッドの作成者IDをセッションに保存している -->
<div>
<s:if test="%{#session.loggedInUser.user_id == #session.thread_user_id}">
<s:form action="EditThread" method="post">
<s:hidden name="thread_id" value="%{thread_id}" />
<s:submit value="スレッド編集" />
</s:form>
</s:if>
</div>
✅ まとめ:Vol.8 タグライブラリ「入門編」から「応用編」へ
Vol | タイトル | 内容 |
---|---|---|
8.0 | OGNL入門 | Struts2タグの基礎を支える技術 |
8.1〜8.7 | 各UIタグ |
input , form , submit , fielderror などの使い方 |
8.8 | 総まとめ | 入門編の振り返りと全体像の整理 |
8.9(本記事) | 条件表示の応用 | 表示制御(if / else)とOGNLの実践活用 ← 応用編のスタート! |
▶ 次回予告:Vol.8.10(仮)〜 カスタムタグを使ってもっと自由なUI制御へ!
次回はさらに一歩進んで、カスタムタグや共通コンポーネントの工夫など、
現場で役立つStruts2タグの応用テクニックをご紹介予定です。お楽しみに!
🚀 公開中のシリーズ記事一覧
👉 📚 まとめページはこちら