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