概要
Sprint bootでWebアプリの開発をしています。
画面内でユーザがボタンをクリックすると、クリックしたボタンに応じて画面を一部更新させたく、
ajaxとthymeleafのfragmentを活用してみたところ、コントローラからレスポンスは返ってきているものの、
エラーになってしまいます。
発生している問題・エラーメッセージ
Google Chromeのディベロッパーツールのコンソールを見たところ、ajaxでレスポンスを受け取ったあとに以下のようにPOSTしているようで、
コントローラ側ではPOSTに対応したメソッドが無いためエラーになっているようです。
①/test/inputにアクセス
②ボタンクリックでURLを「/test/index/btn」としてajax通信
③通信後に/test/inputに対してPOSTしている。
なぜ、POSTが走ってしまうのでしょうか。
書き方に誤りがあれば、ご教示いただけますでしょうか。
2020-09-01 16:46:06.335 WARN 14528 --- [nio-8080-exec-5] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]
該当のソースコード
Java
1(省略※/test/inputへのGET用メソッドがあります) 2 @RequestMapping(value = "test/input/btn", method = RequestMethod.GET) 3 public String bankDirectBtn(Model model, @RequestParam(value = "num")String num) { 4 5 model.addAttribute("num", num); 6 7 return test/input + " :: testFragment"; 8 }
numの値がある場合、ボタンを表示せず、numの値を表示させます。
html (test/input.html)
1(省略) 2<div id="testFragment" th:fragment="testFragment"> 3 <table class="testBtnArea" th:if="${#strings.isEmpty(num)}"> 4 <tr> 5 <td><button id="test001" class="testBtn" onclick="testBtn('001')">テスト1</button></td> 6 <td><button id="test002" class="testBtn" onclick="testBtn('002')">テスト2</button></td> 7 <td><button id="test003" class="testBtn" onclick="testBtn('003')">テスト3</button></td> 8 </tr> 9 </table> 10 <p th:if="${not #strings.isEmpty(num)} th:text="${num}" /> 11</div>
javascript
1function testBtn(num) { 2 $.ajax({ 3 url: '/test/input/btn', 4 type: 'get', 5 data: { 6 num: #num 7 }, 8 success: function (data) { 9 $('#testFragment').html(data); 10 } 11 }); 12 }
試したこと
Google Chromeのディベロッパーツールで上記jsのdataを出力させたところ、以下のようになっておりました。
<div id="bankSelectFragment"> </div>
回答1件
あなたの回答
tips
プレビュー