Timo
Timo

Reputation: 13

Spring 4 / Neither BindingResult nor plain target object

I know that this question has been asked and answer on different ways, but with Spring everything is different.

I am new with Spring 4 - MVS and just want to create my first MVC - HelloWorld implementation and got the error

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute org.springframework.web.servlet.support.BindStatus.(BindStatus.java:141) org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.get

My web.xml looks like this:

Archetype Created Web Application HelloWorld org.springframework.web.servlet.DispatcherServlet 1 HelloWorld / contextConfigLocation /WEB-INF/HelloWorld-servlet.xml org.springframework.web.context.ContextLoaderListener My HelloWorld-servlet.xml like this:
<context:component-scan base-package="com.programcreek.helloworld.controller" />

<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

My student.jsp looks like this:

     <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head>
    <title>Spring MVC Form Handling</title>
</head>
<body>

<h2>2 Student Information 2</h2>


<form:form method="POST" action="/HelloWorld/addStudent" >
   <table>
    <tr>
        <td><form:label path="name">Name</form:label></td>
        <td><form:input path="name" /></td>
    </tr>
    <tr>
        <td><form:label path="age">Age</form:label></td>
        <td><form:input path="age" /></td>
    </tr>
    <tr>
        <td><form:label path="id">id</form:label></td>
        <td><form:input path="id" /></td>
    </tr>
    <tr>
        <td colspan="2">
            <input type="submit" value="Submit"/>
        </td>
    </tr>
</table>  
</form:form>
</body>
</html>

and my StudentController.java as follow:

package com.programcreek.helloworld.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/")
public class StudentController {

   @RequestMapping(value = "/student", method = RequestMethod.GET)
   public ModelAndView student() {

      return new ModelAndView("student", "command2", new Student());
   }



   @RequestMapping(value = "/addStudent", method = RequestMethod.POST)
   public String addStudent(@ModelAttribute("HelloWorld")Student student, 
   ModelMap model) {

       System.out.println("Controller2");
      model.addAttribute("name", student.getName());
      model.addAttribute("age", student.getAge());
      model.addAttribute("id", student.getId());

      return "result";
   }
}

I always read a lot of example and transfer sample codes to my eclipse to try out, but for this case of student which has been taken from an old example (Spring 2.4).

Thank you for helping me to figure out the problems. (I know about the spring-documentation)

Upvotes: 1

Views: 395

Answers (1)

Kunal Batra
Kunal Batra

Reputation: 991

I have executed your code on my system

you are returning from your controller class

return new ModelAndView("student", "command2", new Student());

so you have map "command2" with the commandName in the form of student.jsp

commandName="command2" in your student.jsp like below

<form:form method="POST" commandName="command2" action="/HelloWorld/addStudent" >

full source code of your project :

student.java

package com.programcreek.helloworld.controller;

public class Student {
       private Integer age;
       private String name="";
       private Integer id;
       public Student(){

       }
       public void setAge(Integer age) {
          this.age = age;
       }
       public Integer getAge() {
          return age;
       }

       public void setName(String name) {
          this.name = name;
       }
       public String getName() {
          return name;
       }

       public void setId(Integer id) {
          this.id = id;
       }
       public Integer getId() {
          return id;
       }
    }

StudentController.java

package com.programcreek.helloworld.controller;

    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.validation.BindingResult;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;

    @Controller
    @RequestMapping("/")
    public class StudentController {

        @RequestMapping(value = "/student", method = RequestMethod.GET)
           public ModelAndView student() {

              return new ModelAndView("student", "command2", new Student());
           }



           @RequestMapping(value = "/addStudent", method = RequestMethod.POST)
           public ModelAndView addStudent(@ModelAttribute("HelloWorld")Student student) {
               ModelAndView modelAndView = new ModelAndView();

               System.out.println("Controller2");
               modelAndView.addObject("name", student.getName());
               modelAndView.addObject("age", student.getAge());
               modelAndView.addObject("id", student.getId());
               modelAndView.setViewName("result");


              return modelAndView;
           }
        }

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0">



    <servlet>
        <servlet-name>DefaultServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>DefaultServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>


</web-app>

DefaultServlet-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.programcreek.helloworld.controller" />
    <!-- <context:component-scan base-package="com.packt.webstore.domain.repository.impl" />
    <context:component-scan base-package="com.packt.webstore.service.impl" /> -->

    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>


</beans>

student.jsp

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>

<html>
<head>
    <title>Spring MVC Form Handling</title>
</head>
<body>

<h2>2 Student Information 2</h2>


<form:form method="POST" commandName="command2" action="addStudent" >
   <table>
    <tr>
        <td><form:label path="name">Name</form:label></td>
        <td><form:input path="name" /></td>
    </tr>
    <tr>
        <td><form:label path="age">Age</form:label></td>
        <td><form:input path="age" /></td>
    </tr>
    <tr>
        <td><form:label path="id">id</form:label></td>
        <td><form:input path="id" /></td>
    </tr>
    <tr>
        <td colspan="2">
            <input type="submit" value="Submit"/>
        </td>
    </tr>
</table>  
</form:form>
</body>
</html>

directory structure:

directory structure

execution result

execution result

Upvotes: 1

Related Questions