

私はSpring Boot + Thymeleaf + MySQLで開発を始めたばかりです。

フォームに入力された内容によって画面遷移先を変更したいのですが、うまくいっていません。

例えば、入力フォームに「1」(DBのID)と入力されたら、  
<http://localhost:8080/edit/1>  
に遷移したいです。

初歩的な質問ですみませんが、回答お願い致します。

◆ソースコード

[html]

[code]

       <form method="post" action="/edit">
        <h1>Please input the number</h1>
        <input type="text" name="id" th:value="${id}" />
        <input type="submit" value="Send" >
        <br>
        <a th:href="@{/}">Back enter display</a>
        </form>
    
[/code]

[コントローラ]

[code]

      @RequestMapping(value = "/edit/{id}", method = RequestMethod.GET)
        public ModelAndView edit(@ModelAttribute MyData mydata, @PathVariable int id, ModelAndView mav) {
            mav.setViewName("edit");
            mav.addObject("title", "edit mydata");
            mav.addObject("id",id);
            Optional<MyData> data = repository.findById((long)id);
            mav.addObject("formModel",data.get());
            return mav;
        }
        @RequestMapping(value = "/edit/{id}", method = RequestMethod.POST)
        @Transactional(readOnly = false)
        public ModelAndView update(@ModelAttribute MyData mydata,@PathVariable int id, ModelAndView mav) {
            mydata.setId(id);
            repository.saveAndFlush(mydata);
            return new ModelAndView("redirect:/");
        }
    
        @RequestMapping(value="/searchId", method = RequestMethod.GET)
        public ModelAndView searchId(@ModelAttribute("formModel") MyData mydata, ModelAndView mav) {
            mav.setViewName("searchId");
            return mav;
        }
    
        @RequestMapping(value="/searchId", method = RequestMethod.POST)
        public ModelAndView serachId(@PathVariable int id, ModelAndView mav) {
            mav.setViewName("searchId");
            return new ModelAndView("'/edit");
        }
    
[/code]

[エラー内容]  
入力フォームに「1」と入力して「Send」ボタンを押すと、  
URLは「<http://localhost:8080/edit>」となり、  
エラーメッセージは以下が表示されます。

[code]

    --
     Whitelabel Error Page
        This application has no explicit mapping for /error, so you are seeing this as a fallback.
    
        Wed Oct 09 19:26:41 JST 2019
        There was an unexpected error (type=Not Found, status=404).
        No message available
    --
    
[/code]

ブラウザでURLに直接  
<http://localhost:8080/edit/1>  
と入力した場合は、正しく画面遷移することは確認できています。

どのように修正したらよいか、教えてください。


CC BY-SA 4.0
2019-10-09T23:24:57.643
59607
2023-09-06T04:02:55.257
2019-10-09T23:40:44.867
2238
26392
question
java mysql spring-boot thymeleaf
フォームに入力された内容によって画面遷移先を変更したい

[code]

       <form method="post" action="/edit">
        <h1>Please input the number</h1>
        <input type="text" name="id" th:value="${id}" />
    
[/code]

となっているので、ボタンをクリックすると、`/edit`というパスに対して、リクエスト・パラメーター`id`がPOSTで送信されます。なので、`@RequestMapping`の値が`"/edit"`かつメソッドがPOSTで、`@RequestParam`を指定した`id`の引数を持つ以下のようなメソッドが必要だと思います。

[code]

        @RequestMapping(value = "/edit", method = RequestMethod.POST)
        public ModelAndView update(@ModelAttribute MyData mydata, @RequestParam int id, ･･･
    
[/code]

※動作確認しているわけではないので、間違っているかもしれませんが。


CC BY-SA 4.0
2019-10-10T00:23:14.133
59609
2019-10-10T00:31:34.410
2019-10-10T00:31:34.410
21092
21092
59607
answer