Spring boot:java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'edit' available as request attribute

Viewed 397

I'm working on my "Edit" site,which can change the data on the existing webpage. I'm getting this error and can't find the problem on my code. My controller:

    @PostMapping("editKursInfo")
    public String editKursInfo(Model model,
            @Valid @ModelAttribute("edit") Kurs kurs,
            BindingResult bindingresult)
        {
        if (bindingresult.hasErrors()) {
            model.addAttribute("edit", kurs);
            return "editKursInfo";
        }
        model.addAttribute("kurs", kurs);
     // model.addAttribute("edit", kurs);
        data.saveKurs(kurs);
        return "editKurs";
        }

Thymeleaf:

                <form action="editKursInfo" method="POST"
                th:object="${edit}">
                <span th:text="${kurs.kursName}" id="kursNameSpan" style=" display: none;"></span>                                                                  
                <input th:field="*{kursName}"                                   
                type="text"
                align="left"                                
                class="form-control"
                style="width:250px;"               
                th:errorclass="is-invalid"
                id="kursNameInput"
                value=""/><br>
                <div th:if="${#fields.hasErrors('kursName')}" th:errors="*{kursName}" class="invalid-feedback">          </div>    
                          

Javascript:

            <script type="text/javascript">
                var value = $("#kursNameSpan").text();
                var lower = $("#kursNameInput").val(value);        
            </script>

the part of error:

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'edit' available as request attribute
    at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:153) ~[spring-webmvc-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.web.servlet.support.RequestContext.getBindStatus(RequestContext.java:903) ~[spring-webmvc-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.thymeleaf.spring5.context.webmvc.SpringWebMvcThymeleafRequestContext.getBindStatus(SpringWebMvcThymeleafRequestContext.java:227) ~[thymeleaf-spring5-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at org.thymeleaf.spring5.util.FieldUtils.getBindStatusFromParsedExpression(FieldUtils.java:306) ~[thymeleaf-spring5-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at org.thymeleaf.spring5.util.FieldUtils.getBindStatus(FieldUtils.java:253) ~[thymeleaf-spring5-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at org.thymeleaf.spring5.util.FieldUtils.getBindStatus(FieldUtils.java:227) ~[thymeleaf-spring5-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at org.thymeleaf.spring5.util.FieldUtils.checkErrors(FieldUtils.java:212) ~[thymeleaf-spring5-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at org.thymeleaf.spring5.util.FieldUtils.hasErrors(FieldUtils.java:71) ~[thymeleaf-spring5-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at org.thymeleaf.spring5.expression.Fields.hasErrors(Fields.java:58) ~[thymeleaf-spring5-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
1 Answers

You have to set the edit attribute on the model before actually showing the page. So you need to have a GET-mapped method, something like the following:

@GetMapping(value = "/editKursInfo")
public String viewEditKursPage(Model model) {
   Kurs kurs = new Kurs();
   model.addAttribute("edit", kurs);
   return "editKursInfo";
}
Related