フォームの入力チェックでのマスタ情報保持
入力画面でセレクトボックスなんかをDBのデータを取得して作成する場合、
入力チェックでエラーが行われたとき、その情報をどうやって保持しておくか悩んでいた。
- 入力フォームからそのデータを再度リクエストで送信する。
- シングルトンで保持しておく(DBのデータの変動が少ない場合はよいが。。)
上記のどれも、微妙だと思うので、下記のような方法をとることにした。
入力フォームでそのデータのみセッションに保持しておく。
(※入力画面から送信されるデータは、セッション管理は行わないようにする。)
アクション側
/** * 今回はSeasar2+SAStrutsで作ってみる */ public class HogeAction { @ActionForm @Resource(name = "hogeForm") protected HogeForm form; @Resource(name = "hogeService") protected HogeService hogeService; @Execute(validator = false) public String form() { // DBからリストを取得して、セッションに保持しておく form.hogeList = hogeService.findHogeList(); return "form.jsp"; } @Execute(validator = true, input = "form.jsp") public String confirm() { return "confirm.jsp"; } @Execute(validator = true, input = "form.jsp") public String exec() { return "complete?redirect=true"; } // 完了画面に来た段階で、セッションを破棄 @RemoveSession(name = "hogeForm") @Execute(validator = false) public String complete() { return "complete.jsp"; } }
フォーム側
@Component(instance = InstanceType.SESSION) public class HogeForm implements Serializable { // 画面入力するデータはセッションの保持対象にしない public transient String hoge; // 画面入力するデータはセッションの保持対象にしない public transient String hoge2; public List<String> hogeList; }