パラメータ(HTMLのformで送ることができる値)を受け取ってみましょう。
ここでは例として「足し算」を行います。2つの数値をフォームから送信し、その数値を足し算してページに表示します。
HTMLによるフォームは次のようになります。数値を入力して送信ボタンを押すと、actionで指定したURLにパラメータとともにリクエストされます。input要素のname属性で参照のための名前(ここでは「a」と「b」)を指定します。formのmethod属性では、getかpostが指定できます。getの場合はURLに「?a=1.2&b=3.4」といった形でパラメータが付加されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8" /> <title>sample3a</title> </head> <body> <h1>sample3a</h1> <form action="sample3b" method="get"> a: <input type="text" name="a" /><br /> b: <input type="text" name="b" /><br /> <input type="submit" /> </form> </body> </html> |
足し算した結果を表示するページは次のようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8" /> <title>sample3b</title> </head> <body> <h1>sample3b</h1> <p> <span th:text="${a}">a</span>+<span th:text="${b}">b</span>=<span th:text="${sum}">sum</span> </p> </body> </html> |
コントローラは次のようにします。
27 28 29 30 31 32 33 34 35 36 37 38 39 |
@RequestMapping("sample3a") public String sample3a() { return "sample3a"; } @RequestMapping("sample3b") public String sample3b(ModelMap modelMap, @RequestParam("a") double a, @RequestParam("b") double b) { double sum = a + b; modelMap.addAttribute("a", a); modelMap.addAttribute("b", b); modelMap.addAttribute("sum", sum); return "sample3b"; } |
受け取りたいパラメータは、@RequestParamアノテーションをつけてメソッドの仮引数として指定します。@RequestParamの後ろのカッコ内には、input要素のname属性と対応するように指定します。このようにすることで、パラメータを普通のメソッドの引数と同じように扱うことができます。
実行例
もちろん、仮引数の型がdoubleなので、doubleと解釈できない文字列の場合はエラーになります。ビュー側で数値以外が入力できないようにしたり、コントローラではStringで受け取って適切なエラー処理をする等といった処理を(必要に応じて)行うとよいでしょう。