フォームの入力チェックでのマスタ情報保持

入力画面でセレクトボックスなんかを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;

}