Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

Spring BootでSessionを扱う(SessionAttribute版)

$
0
0

SessionAttributeを使うと同じコントローラ内でオブジェクトを持ちまわることが出来ます。

詳細は全部こっちに書いてあります。 5.8. セッション管理 — TERASOLUNA Server Framework for Java (5.x) Development Guideline 5.0.0.RELEASE documentation

試してみたことメモ

Sessionを使うためにControllerにSessionAttirbutesアノテーションをつけてvalueにオブジェクトの名前をつけます。そして、同じ名前のModelAttributeをつけたファクトリメソッドをInputControllerに作ります。

こんな感じで。

@Controller@RequestMapping("/input")
@SessionAttributes(value = "inputForm")
publicclass InputController {

    @ModelAttribute("inputForm")
    InputForm inputForm() {
        System.out.println("create inputForm");
        returnnew InputForm();
    }
}

これを受け取るコントローラのメソッドがあると、自動的にオブジェクトが生成されてセッションに格納されます。

// これが呼ばれる前にinputForm()メソッドが呼ばれる@RequestMapping(value = "/input1", method = RequestMethod.GET)
public String input1(InputForm form) {
    return"input/input1";
}

必要なくなったらSessionStatesのsetCompleteで破棄できます。

@RequestMapping(value = "/complete", method = RequestMethod.POST)
public String complete(
        @Validated(value = {InputForm.Input1.class, InputForm.Input2.class, InputForm.Input3.class}) InputForm form, 
        BindingResult result,
        SessionStatus sessionStatus,
        RedirectAttributes redirectAttributes) {
    if (result.hasErrors()) {
        return"input/input3";
    }

    // いらなくなったので破棄
    sessionStatus.setComplete();
    redirectAttributes.addFlashAttribute("inputForm", form);
    return"redirect:/greet";
}

Thymeleafのテンプレートからは${inputForm}という感じでアクセスできます。割と便利ですね。


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>