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.7:【Struts2】入力値の保持&初期値再表示編 〜 エラー後の入力値維持やフォーム初期化のベストプラクティス 〜

Last updated at Posted at 2025-05-24

🧭 はじめに

フォーム入力のUXを高めるには「エラー後も入力内容が残る」ことが重要です。
Struts2ではこの機能が標準でサポートされていますが、正しく設定しないと意図しない挙動になります。
また、フォーム表示時にあらかじめ値をセットする「初期値の表示」も、実務でよく使う実装です。
本記事ではこの2つ:

  • ① 入力値の保持(エラー時も再表示される)
  • ② 初期値の再表示(画面表示時に値をプリセット)

をテーマに解説します!


✅ 入力値の保持 〜 Struts2の自動機能を活かす〜

🔁 エラー時、入力がリセットされない理由

Struts2では、validate()addFieldError() を使って input に遷移すると、
フォームの <s:textfield>, <s:textarea> などは自動的に値を保持してくれます。

✔ JSP側の記述例:

<s:form action="login">
  <s:textfield name="userId" label="ユーザーID" />
  <s:password name="password" label="パスワード" />
  <s:submit value="ログイン" />
</s:form>

🔁 結果

  • エラー後、LoginAction のプロパティ(userId, password)の値がフォームに戻される

  • 特に <s:textfield><s:textarea> は何も設定しなくても自動でバインドされ


🛠 注意点:リセットされてしまうケース

以下のような場合、入力値は保持されません

パターン 説明
result name="success" で別アクションに redirect している セッションを介さない限り、プロパティ値は失われる
<input type="text"> のような純HTMLで書いている Strutsタグを使っていないため、自動バインドされない
Java側で reset() を呼んでしまっている フォームが初期化されてしまう

🚀 初期値の再表示(画面表示時の値セット)

💡 prepare() メソッドの活用

Struts2の Preparable インターフェースを使うことで、画面表示前に初期値を設定できます。

🎯 LoginAction.java(例)

public class LoginAction extends ActionSupport implements Preparable {
  private String userId;

  @Override
  public void prepare() {
    // 初期表示時にデフォルト値をセット
    if (userId == null) {
      userId = "guest";
    }
  }

  public String execute() {
    return SUCCESS;
  }

  // getter/setter 略
}

🔍 JSP側

<s:textfield name="userId" label="ユーザーID" />

→ 初期表示で guest が入っている状態に!


🎯 まとめ

項目 内容
入力保持 <s:textfield> 等を使えば自動バインドされる(validate→input 遷移)
初期値表示 prepare()execute() でプロパティに初期値をセット
注意点 redirectやHTMLタグ直書きでは値が失われるので注意

🧭 次回予告:Vol.9.8

次回は、**「独自バリデータ(カスタムFieldValidator)の作成」**に踏み込みます!

  • バリデーションのロジックを使い回したい

  • XMLでも使えるようにしたい

  • 複雑なチェックを綺麗に分離したい

といったケースに対応します!


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


🔎 Vol.9系で扱うトピック

テーマ 内容の一部紹介
9.1 validate()メソッドの基本 Struts2標準の入力チェック基礎
9.2 @Validations アノテーション活用 宣言的バリデーション設計
9.3 validation.xml 外部定義でのバリデーション 大規模PJでのメンテナンス性
9.4 conversion.properties と型変換 日付/数値/Enum変換の実務対応
9.5 入力エラー時のメッセージ制御 addFieldError() / メッセージキー運用
9.6 バリデーション共通化 共通部品によるDRY設計
9.7 サーバサイドとクライアントサイドの協調 jQueryやHTML5との併用戦略
9.8 実務シナリオでのバリデーション総仕上げ 会員登録/投稿処理などの実例適用
9.9 バリデーション処理の単体テスト編 validate()/独自バリデータ/input遷移の検証を網羅的に
9.10 エラー表示のUIデザイン編 視認性・操作性を高める実践テクニック
9.11 Ajax×バリデーション連携編 クライアント×サーバーで UX&保守性を両立するハイブリッド構成

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?