小编典典

Thymeleaf Bean名称“ person”的BindingResult或普通目标对象都不能用作请求属性

spring-boot

据我所知,这是正确设置的,但出现以下错误:

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";
}

阅读 734

收藏
2020-05-30

共1个答案

小编典典

你忘了添加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";
}

我已经回答了这样的问题:

2020-05-30