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.9:【Struts2】条件分岐でUIを自在に制御!〜 <s:if> / <s:else> / OGNL式の実践活用 〜

Posted at

🔗 「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>

🔗 該当コード(GitHub):


✅ まとめ: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タグの応用テクニックをご紹介予定です。お楽しみに!


🚀 公開中のシリーズ記事一覧

👉 📚 まとめページはこちら

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?