@GetMapping
コントローラーを作成します。前回の方法でクラスを作成し「名前」を「CalculationController」としてください。
サンプルプログラムの「gs-handling-form-submission-complete」を参考に次のようにプログラムを記述しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package com.example.demo; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @Controller public class CalculationController { @GetMapping("/cal") public String form(Model model) { Calculation cal = new Calculation(); model.addAttribute("cal", cal); return "index"; } @PostMapping("/cal") public String submit(@ModelAttribute Calculation cal, Model model) { cal.cal(); model.addAttribute("cal", cal); return "index"; } } |
9行目の「@Controller」は、このクラスがコントローラーであることを宣言しています。
9 |
@Controller |
12行目の「@GetMapping(“/cal”)」で、ユーザが
http://<サーバー>:8080/cal
と要求した際の紐づけを行っています。具体的には次の行13行目のメソッドformが実行されます。
12 13 |
@GetMapping("/cal") public String form(Model model) { |
メソッドformではモデルCalculationのインスタンスを作成し、model.addAttributeメソッドでビューに引き渡しています。
14 15 |
Calculation cal = new Calculation(); model.addAttribute("cal", cal); |
最後にビューindexを表示しています。ビューindexは次回作成します。
16 |
return "index"; |
@PostMapping
ビューで入力が行われ「計算」ボタンが押下されると次のURLをpostで発行するようにします。
http://<サーバー>:8080/cal
このURLと紐づけるための命令が18行目の「@PostMapping(“/cal”)」です。そして次の19行目のメソッドsubmitが実行されます。
18 19 |
@PostMapping("/cal") public String submit(@ModelAttribute Calculation cal, Model model) { |
19行目の@ModelAttribute命令により入力された値がクラスCalculationの変数に設定されます。
設定された値の計算は20行目でクラスCalculationのcalメソッドを呼び出すことにより実現しています。
20 |
cal.cal(); |
これでクラスCalculationの変数に入力された値、計算した値が設定されました。これをビューに引き渡して表示するだけです。21行目のmodel.addAttributeメソッドでビューに引き渡すインスタンスを設定し、22行目でビューindexを表示しています。
21 22 |
model.addAttribute("cal", cal); return "index"; |