コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

Spring MVC 4.1 No. 021 submitボタンによって分岐する

formの中にsubmitボタンが複数ある場合に、どのボタンが押されたかはリクエストに含まれるパラメータでわかります。具体的にはbutton1というname属性のボタンを押した時には、button1パラメータが送信されます。それを利用して、同じURLに対してパラメータの有無によって分岐することができます。

@RequestMappingのparams属性で、任意のパラメータが送信されている場合にそのメソッドが使用されます。

package com.example.spring.controller.c021;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class C021Controller {
    @RequestMapping("/c021/branchForm")
    public String branchForm() {
        return "c021/branchForm";
    }

    @RequestMapping(value = "/c021/branchRecv", params = "branch1", method = RequestMethod.POST)
    public String branch1() {
        return "c021/branch1";
    }

    @RequestMapping(value = "/c021/branchRecv", params = "branch2", method = RequestMethod.POST)
    public String branch2() {
        return "c021/branch2";
    }

    @RequestMapping(value = "/c021/branchRecv", params = "branch3", method = RequestMethod.POST)
    public String branch3() {
        return "c021/branch3";
    }

    @RequestMapping(value = "/c021/branchRecv", params = "branch4", method = RequestMethod.POST)
    public String branch4() {
        return "c021/branch4";
    }
}

submitが送信されるボタンを4つ用意して、それぞれname属性をbranch1〜branch4にしています。

<%@page contentType="text/html; charset=utf-8" %><%--
--%><!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>サンプル</title>
 </head>
 <body>
  <form action="branchRecv" method="post">
   <input type="submit" name="branch1" value="送信1">
   <input type="submit" name="branch2" value="送信2">
   <button name="branch3">送信3</button>
   <button name="branch4">送信4</button>
  </form>
 </body>
</html>

branch1〜4は中の確認用の文字列が異なるだけなので、branch1.jspだけ確認します。

<%@page contentType="text/html; charset=utf-8" %><%--
--%><!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>サンプル</title>
 </head>
 <body>
branch1
 </body>
</html>

確認用のテストケースは次のとおりです。

package com.example.spring.controller.c021;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class C021Controller {
    @RequestMapping("/c021/branchForm")
    public String branchForm() {
        return "c021/branchForm";
    }

    @RequestMapping(value = "/c021/branchRecv", params = "branch1", method = RequestMethod.POST)
    public String branch1() {
        return "c021/branch1";
    }

    @RequestMapping(value = "/c021/branchRecv", params = "branch2", method = RequestMethod.POST)
    public String branch2() {
        return "c021/branch2";
    }

    @RequestMapping(value = "/c021/branchRecv", params = "branch3", method = RequestMethod.POST)
    public String branch3() {
        return "c021/branch3";
    }

    @RequestMapping(value = "/c021/branchRecv", params = "branch4", method = RequestMethod.POST)
    public String branch4() {
        return "c021/branch4";
    }
}

ソースは https://github.com/kuwalab/spring-mvc41 にあります。タグ021が今回のサンプルです。

まとめ http://kuwalab.hatenablog.jp/entry/spring
最初 http://kuwalab.hatenablog.jp/entry/spring_mvc41/001
前回 http://kuwalab.hatenablog.jp/entry/spring_mvc41/020
次回 http://kuwalab.hatenablog.jp/entry/spring_mvc41/022