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.9.11:【Struts2】Ajax×バリデーション連携編 〜 クライアント×サーバーで UX&保守性を両立するハイブリッド構成 〜

Last updated at Posted at 2025-05-24

Struts2によるバリデーション実装の集大成として、Ajaxとの連携によるバリデーション制御を解説します。
本記事では、サーバーサイドの robust な検証処理を維持しながら、フロント側での応答性やUXを両立するテクニックを紹介!


🔍 本記事で実現すること

  • ✅ フォーム入力中に 即時バリデーション(例:ID重複チェックなど)
  • ✅ Struts2のActionに対して 非同期リクエストでvalidate()を走らせる
  • ✅ フロントでのバリデーション結果をユーザーに即時フィードバック

🛠 前提環境

  • Struts2(本プロジェクトの既存構成)
  • jQuery(Ajax利用)
  • 入力画面(例:ユーザー新規登録画面)

💡 実装方針:サーバー側validate() × jQuery Ajax の分離活用

📌 Ajax専用Actionを用意

public class AjaxUserIdCheckAction extends ActionSupport {
    private String userId;
    private boolean exists;

    public String execute() {
        // DBチェック処理
        exists = UserDao.checkExists(userId);
        return SUCCESS;
    }

    // Getter/Setter
}

📌 struts.xml にマッピング

<action name="ajaxUserIdCheck" class="com.company.action.AjaxUserIdCheckAction">
    <result name="success" type="json"/>
</action>

type="json" を指定することで、JSON形式でレスポンス


🧪 jQuery で非同期チェック

<input type="text" id="userId" name="userId" />
<span id="checkResult"></span>

<script>
$('#userId').on('blur', function() {
  $.ajax({
    url: 'ajaxUserIdCheck.action',
    data: { userId: $(this).val() },
    dataType: 'json',
    success: function(response) {
      if (response.exists) {
        $('#checkResult').text('すでに使用されているIDです').css('color', 'red');
      } else {
        $('#checkResult').text('使用可能です').css('color', 'green');
      }
    }
  });
});
</script>


📝 補足:実務での活用ポイント

  • ✅ Ajaxは 応答性UP に最適。ただし、最終的なチェックは 必ずサーバー側でvalidate() を行う!

  • ✅ Ajax専用Actionでは、バリデーション結果を簡易JSONで返す構成が現実的

  • ✅ 複数項目を一括チェックする場合は、専用DTOやMap構成も検討


🧭 これにて Vol.9シリーズ 完結!

Struts2の入力チェック機構は、基本的な使い方から拡張、UI連携、テスト、UX、国際化まで非常に幅広いテーマがあります。
このVol.9シリーズでは、実務ですぐに使えるエッセンスに絞ってまとめました。


✨ 今後の予定?

Struts2の次なるステップとして、以下も検討中です:

  • Vol.10シリーズ:セキュリティ(CSRF/XSS/認可)

  • Vol.11シリーズ:例外処理・ログ設計・監視系

  • Vol.12シリーズ:DB連携・トランザクション・DAO設計

引き続き、実務的な構成でお届けします!


✅ 参考リポジトリ

🔗 GitHub:Portfolio_Bulletinboard - GitHub


✨ シリーズまとめ(Vol.9.x バリデーション編)


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?