据我所知,这是正确设置的,但出现以下错误:
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'person' available as request attribute
形成
<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>
人.java
public class Person { private int id; private String name; private String lastName; private String email; private String subject; private String message; .... }
控制者
@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"; } }
我查看了Spring-boot和Thmeleaf的设置,看起来我的设置是相同的。
---------------------更新1 -----------------------
我已将post方法更改为包括BindingResult,但均未成功。
@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"; }
你忘了添加BindingResult 后 您@ModelAttribute:
BindingResult
@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"; }
我已经回答了这样的问题: