2011年11月18日金曜日

[Spring][Form][Controller]フォームクラスとコントローラクラスの記述

コントローラクラスは@Controllerというアノテーションを付与することで、Springフレームワークに自動認識させることができる。(ただし名前によるコントローラ認識の設定ファイル記述は必要)

@Controller
public class SampleController {

画面入力項目を集めたフォームクラスを定義し、コントローラクラスに設定するための記述方法は、次の通り。

    @ModelAttribute
    public SampleForm setSampleForm() {
        return new SampleForm();
    }

コントローラクラス内でModelAttributeアノテーションを使い、フォームクラスをnewするsetterメソッドを作ることで、サブミット時に画面入力項目のデータがフォームクラスに設定されるようになる。

HTTPプロトコルのGETに対応するハンドラメソッドを作りたい場合は、次のように記述する。

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView toInitialPage() {

戻り値はStringでもよく、その場合はビューのリソース位置をreturnする。

    @RequestMapping(method = RequestMethod.GET)
    public String index() {
        return "/index/index";
    }

このように記述した場合/WEB-INF/jsp/index/index.jspを指す。(ただしリソースパスはweb.xml等で設定したものによって変わる)
DTOなど、画面表示項目がある場合は、それをModelAndViewクラスに設定してreturnする。

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView index() {

        // 画面表示項目の取得

        // 画面出力内容を設定する
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("sampleDto", sampleDto);

        // 画面遷移を行う
        return modelAndView;
    }

sampleDtoというDTOクラスには、画面表示用の項目を設定してあるものとする。
上記のように記述した場合、JSPのEL式で${sampleDto}と記述すればアクセスできる。
${sampleDto.id}など、DTOクラスのメンバにもアクセス可能である。(この辺りは通常のEL式の使い方と同じ)

フォームクラスを定義し、サブミット時にフォームクラスのデータを引数として取得したい場合は、次のように記述する。

    @RequestMapping(method = RequestMethod.POST)
    public ModelAndView onSubmit(SampleForm sampleForm, BindingResult bindingResult) {

HttpSessionの情報を受け取りたい場合は、次のように記述する。

    @RequestMapping(method = RequestMethod.POST)
    public ModelAndView onSubmit(HttpSession session) {

引数・戻り値に応じてSpringフレームワークが自動で設定・取得を行ってくれる。

0 件のコメント:

コメントを投稿