JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
Spring-MVCの散歩道 > SpringMVC の小径 > 第8歩 あと一歩 DB連携 > 邂逅の頂

package jp.dip.arimodoki.cntl;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import jp.dip.arimodoki.blogic.BlUserIf;
import jp.dip.arimodoki.model.PromenadeFormIf;

@Scope("prototype")         //魔よけのお札
@Controller     //このクラスはコントローラです。
public class Promenade {
    @Autowired      //リクエストパラメータFormBeanをDIする
    private PromenadeFormIf promenadeForm;

    @Autowired      //ビジネスロジッククラスをDIする
    private BlUserIf blUser;

    /**
     * PromenadeFormクラスのデータモデルバインド処理
     */
    @ModelAttribute("PromenadeFormData")
    private PromenadeFormIf setupBind() {
        //リクエストパラメータFormBeanをビジネスロジックに継承しておく
        this.blUser.setForm(this.promenadeForm);
        return this.promenadeForm;
    }

    /**
     * 最初の入力画面を単純に表示するためだけのメソッドです
     * @return view名(入力画面)
     */
    @RequestMapping(value = "/promenade")   //リクエストマッピング
    public String promenade() {
        this.promenadeForm.getUser().setUserid(1000);	//適当なユーザーID
        this.blUser.dbProc();     //DBを検索してみる
        return "promenade";     //入力画面
    }

    /**
     * 入力結果検証メソッド
     * @param formbean 入力検証用FormBean
     * @param result エラー検証結果
     * @return view名(検証成功なら結果画面、失敗なら入力画面)
     */
    @SuppressWarnings("unused") //コンパイラの警告を無視する(formbean未使用)
    @RequestMapping(value = "/promenaderes")        //リクエストマッピング
    public String promenaderes(
        @Valid @ModelAttribute("PromenadeFormData") PromenadeFormIf formbean,
        BindingResult result
        )  throws Exception {

        //入力妥当性チェック判定
        if (result.hasErrors()) {
            //入力エラーがあったら入力画面にエラー情報を表示
            return "promenade"; //入力画面のviewを表示
        }

        /**
         * リクエストパラメータは、setupBind()で
         * ビジネスロジックに継承されているので
         * こまごました処理(DBアクセス処理など)は
         * 全部まとめて、ビジネスロジックに委任する
         */
        this.blUser.dbProc();

        return "promenaderes";      //入力妥当性チェックに成功したら、結果画面
    }
}