🧭 はじめに
フォーム入力の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&保守性を両立するハイブリッド構成 |