Spring Frameworkでのフォーム利用


JavaのSpring Frameworkでフォームを作ってviewに渡すまでのサンプルです。
ここではSpringとLombokを使う前提とします。

🎂 Formオブジェクトの作成

まずはFormオブジェクトを作成します。

@Data
public class CommentForm {
@NotNull
@Size(min = 1, max = 127)
private String name;

@NotNull
@Size(min = 1, max = 1024)
private String comment;
}

🏀 ControllerでFormを受け取る

FormクラスをControllerクラスで受け取ります。

@Controller
@RequestMapping("articles")
public class ArticleController {
private static final String VIEW_BASE = "articles/";

@ModelAttribute
public CommentForm setUpCommentForm() {
return new CommentForm();
}

// GET /articles
@GetMapping("")
public String index(Model model) {
return VIEW_BASE + "index";
}

// GET /articles/create
@GetMapping("create")
public String createForm(CommentForm form, Model model) {
return VIEW_BASE + "createForm";
}

// POST /articles/create?confirm
@PostMapping(value = "create", params = "confirm")
public String createConfirm(@Validated CommentForm form, BindingResult result, Model model) {
if (result.hasErrors()) {
return createRedo(form, model);
}
return VIEW_BASE + "createConfirm";
}

// POST /articles/create?redo
@PostMapping(value = "create", params = "redo")
public String createRedo(CommentForm form, Model model) {
return VIEW_BASE + "createForm";
}

// POST /articles/create
@PostMapping(value = "create")
public String create(@Validated AbcForm form, BindingResult result, Model model, RedirectAttributes redirectAttributes) {
if (result.hasErrors()) {
return createRedo(form, model);
}
// データの登録処理..

redirectAttributes.addFlashAttribute("message", "新規レコードを作成しました")

return "redirect:/articles";
}

}

@ModelAttributeでRequestMappingのついたメソッドの実行前に、受け取りたいFormクラスを初期化して返します。返り値はリクエストスコープに設定され、Thymeleafなどのビューから参照できます。

🏈 FormのボタンでPOST先のアクションを変える

Formの送信ボタンのnameオプションでPOST先のアクションを振り分ける方法を紹介します。

View側のHTMLはこちら。

<form>
<button type="submit" name="A">Aへ進むbutton>
<button type="submit" name="B">Bへ進むbutton>
form>

Controller側のコードはこちら。

@PostMapping(value = "/wizard", params = "A")
public String wizardA() {
return "wizard_a";
}

@PostMapping(value = "/wizard", params = "B")
public String wizardB() {
return "wizard_b";
}

👽 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍