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

匿名 (未验证) 提交于 2019-12-03 03:03:02

问题:

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  object for bean name 'person' available as request attribute 

Form

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

Person.java

public class Person {      private int id;     private String name;     private String lastName;     private String email;     private String subject;     private String message;      .... } 

Controller

@Controller public class ApplicationController {      @RequestMapping(value = "/", method = RequestMethod.GET)     public String indexPage(){         return "index";     }      @RequestMapping(value="/person", method=RequestMethod.GET)     public String contactForm(Model model) {         model.addAttribute("person", new Person());         return "index";     }      @RequestMapping(value="/person", method=RequestMethod.POST)     public String contactSubmit(@ModelAttribute Person person, Model model) {         model.addAttribute("person", person);         return "result";     } } 

I looked at Spring-boot and Thmeleaf setup and it looks like my setup is identical.

---------------------Update 1-----------------------

I have changed my post method to include BindingResult with no success.

 @RequestMapping(value="/person", method=RequestMethod.POST)     public String contactSubmit(@Valid @ModelAttribute Person person, BindingResult bindingResult, Model model) {          if(bindingResult.hasErrors()){             System.out.println("There was a error "+bindingResult);             System.out.println("Person is: "+ person.getEmail());             return "index";         }          model.addAttribute("person", person);         return "result";     } 

回答1:

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 :



回答2:

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.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!