Thymeleaf Neither BindingResult nor plain target object for bean name 'person' available as request attribute

后端 未结 3 951
再見小時候
再見小時候 2021-01-01 01:08

From what I can tell this is set up correctly but I am getting the following error:

java.lang.IllegalStateException: Neither BindingResult nor plain target 
         


        
相关标签:
3条回答
  • 2021-01-01 01:11

    First I had the form in index.html

     @RequestMapping(value = "/", method = RequestMethod.GET)
        public String indexPage(){
            return "index";
        }
    

    So when my form:

    <form th:action="@{/person}" th:object="${person}" method="post" >
                    <input type="text" th:field="*{subject}" class="contact col-md-6" placeholder="Subject *" />
                    <input type="text" th:field="*{name}" class="contact col-md-6" placeholder="Name *" />
                    <input type="text" th:field="*{lastName}" class="contact col-md-6" placeholder="Last Name *" />
                    <input type="email" th:field="*{email}" class="contact noMarr col-md-6" placeholder="E-mail address *" />
                    <textarea name="comment" class="contact col-md-12" th:field="*{message}" placeholder="Message *" ></textarea>
                    <input type="submit" id="submit" class="contact submit" value="Submit" />
                    <input type="reset" value="Reset" />
                </form>
    

    Was looking for / it was hitting the above method, NOT:

    @RequestMapping(value="/", method=RequestMethod.GET)
        public String contactForm(@Valid @ModelAttribute("person") Person person, BindingResult bindingResult,
                                  HttpServletRequest request, Model model) throws IOException {
    
            if(bindingResult.hasErrors()){
                System.out.println("There was a error "+bindingResult);
    
                return "index";
            }
    
            model.addAttribute("person", new Person());
            return "index";
        }
    

    Which was correct!

    I had to remove the first method and it worked.

    0 讨论(0)
  • 2021-01-01 01:29

    You forgot to add BindingResult after your @ModelAttribute :

    @RequestMapping(value="/person", method=RequestMethod.POST)
    public String contactSubmit(@ModelAttribute Person person, BindingResult bindingResult, Model model) {
        if (bindingResult.hasErrors()) {
            //errors processing
        }  
        model.addAttribute("person", person);
        return "result";
    }
    

    I'm already have answered to question like this :

    • html form validation using thymeleaf not working spring boot
    0 讨论(0)
  • 2021-01-01 01:36

    Model attribute has to be initialized (using GET method) before calling post method. In your case you need one more method in controller which does model.addAttribute("person",new Person()); and it has to be called before post.

    Refer below link: https://spring.io/guides/gs/handling-form-submission/ OR http://forum.thymeleaf.org/Neither-BindingResult-nor-plain-target-object-for-bean-name-miniDoniie-available-as-request-attribute-td4027859.html

    It has GetMapping as well as PostMapping in controller.

    0 讨论(0)
提交回复
热议问题