Spring binding exception on form submission

Stuck and has no idea why the Spring Form cannot successfully submit [gives a binding problem] when pre-populated in get Request call loadForm , but works fine when populated with the setupFormObject method with the @ModelAttribute annotation tag. I can provide a simple example on github for testing if asked :)

Example below

 @ModelAttribute("showForm") public ShowForm setupFormObject() { //Instantiate showForm with data return showForm; } @RequestMapping(method = RequestMethod.GET) public ModelAndView loadForm(@RequestParam("id") String id, HttpSession session) { ModelAndView modelAndView = new ModelAndView(nextPage); //Instantiate showForm with data //modelAndView.addObject("showForm", showForm); return modelAndView; } @RequestMapping(method = RequestMethod.POST) public String post(@ModelAttribute("showForm") ShowForm showForm, BindingResult result, final RedirectAttributes redirectAttrs) { //I see changed data here in showForm when populated using @setupFormObject //See an exception in JSP with binding error if populated in loadForm return ""; } 

Stack trace as requested. This is an exception from github .

 `HTTP Status 500 - Request processing failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'users[0]' of bean class [com.example.UserForm]: Illegal attempt to get property 'users' threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property 'users' of bean class [com.example.UserForm]: Could not instantiate property type [com.example.UserEntity] to auto-grow nested property path: java.lang.InstantiationException: com.example.UserEntity` `type Exception report` `message Request processing failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'users[0]' of bean class [com.example.UserForm]: Illegal attempt to get property 'users' threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property 'users' of bean class [com.example.UserForm]: Could not instantiate property type [com.example.UserEntity] to auto-grow nested property path: java.lang.InstantiationException: com.example.UserEntity` `description The server encountered an internal error that prevented it from fulfilling this request.` `exception` `org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'users[0]' of bean class [com.example.UserForm]: Illegal attempt to get property 'users' threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property 'users' of bean class [com.example.UserForm]: Could not instantiate property type [com.example.UserEntity] to auto-grow nested property path: java.lang.InstantiationException: com.example.UserEntity` `org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:927) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:822) javax.servlet.http.HttpServlet.service(HttpServlet.java:647) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796) javax.servlet.http.HttpServlet.service(HttpServlet.java:728)` `root cause` `org.springframework.beans.InvalidPropertyException: Invalid property 'users[0]' of bean class [com.example.UserForm]: Illegal attempt to get property 'users' threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property 'users' of bean class [com.example.UserForm]: Could not instantiate property type [com.example.UserEntity] to auto-grow nested property path: java.lang.InstantiationException: com.example.UserEntity org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:829) org.springframework.beans.BeanWrapperImpl.getNestedBeanWrapper(BeanWrapperImpl.java:556) org.springframework.beans.BeanWrapperImpl.getBeanWrapperForPropertyPath(BeanWrapperImpl.java:533) org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:894) org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:75) org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:699) org.springframework.validation.DataBinder.doBind(DataBinder.java:595) org.springframework.web.bind.WebDataBinder.doBind(WebDataBinder.java:191) org.springframework.web.bind.ServletRequestDataBinder.bind(ServletRequestDataBinder.java:112) org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.bindRequestParameters(ServletModelAttributeMethodProcessor.java:153) org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:106) org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77) org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:123) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:746) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:687) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:822) javax.servlet.http.HttpServlet.service(HttpServlet.java:647) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) ` 

Your help is much appreciated.

thanks

+7
source share
2 answers

The problem is that UserEntity does not have a default constructor, if you add a constructor, it will work cleanly:

 public UserEntity(){ // } 
+28
source

I think what happens is that the way your form is declared in JSP, when presented, assumes that the UserEntity instance of the UserForm instance has a UserEntity instance at position 0, but it actually stumbles upon a null reference.

Yes, you add some UserEntity instances to the model when the form is displayed (using the loadForm method that maps to HTTP Get), but when you submit the form, a new model object is created, and this one only has zeros in the user list.

Try to make the model session a session, so the model instance created when the form was shown will be reused when the form is submitted. Or create your own implementation of List, which will return a new instance of UserEntity when get (int position) is executed and there is nothing there.

0
source

All Articles