Spring MVC Neither BindingResult nor plain target object for bean name

24,040

Solution 1

In your reverse.jsp file, you added modelAttribute as reverseString. So while before loading reverse.jsp, it will look for your ReverseString.java object.

You just need to add ReverseString.java object in request scope of your controller method from where you navigate user to reverse.jsp.

e.g.

@RequestMapping(value = "/getReverseStringForm")
  public String cmLogin(Model model) {
    model.addAttribute(new ReverseString());
    return "reverse";
  }

Solution 2

As I have found out for my self this exception most of cases appears when path to the controller is wrong. Or mistake in syntax. So very carefully check if all links in jsp and paths are right. Because even '/' can be reason of exception.

Share:
24,040
mgrstnr
Author by

mgrstnr

Updated on May 23, 2020

Comments

  • mgrstnr
    mgrstnr almost 4 years

    For some reason I cannot seem to fix this issue, even after looking at multiple examples on here.

    I am trying to handle a form using Spring 3 MVC, but I am getting the following error:

     Neither BindingResult nor plain target object for bean name 'reverseString' available as request attribute
    

    So I am kind of getting what is the problem here, but I failed to solve it. Here is the method in my

    ReverseController class which extends SimpleFormController:

    protected ModelAndView onSubmit(HttpServletRequest request,
            HttpServletResponse response, Object command, BindException errors)
            throws Exception {
        ReverseString revString = (ReverseString) command;
        ModelAndView mav = new ModelAndView();
        ModelMap map = new ModelMap();
        map.addAttribute("reverseString", revString);
        mav.addAllObjects(map);
        return mav;
    }
    

    My app-servlet.xml defines the controller as follows:

    <bean name="/reverse.app" class="ReverseController">
        <property name="commandName" value="reverseString"></property>
        <property name="commandClass" value="ReverseString" />
        <property name="successView" value="reverseResult" />
        <property name="formView" value="reverse" />
    </bean>
    

    This is the form in my reverse.jsp:

    <form:form method="POST" modelAttribute="reverseString" action="handleForm">
    <form:errors path="*" cssClass="errorblock" element="div" />
        <table>
            <tr>
                <td>String to be reversed:</td>
                <td><form:input path="stringToReverse" />
                </td>
                <td><form:errors path="stringToReverse" cssClass="error" />
                </td>
            </tr>
            <tr>
                <td colspan="3"><input type="submit" /></td>
            </tr>
        </table>
    </form:form>
    

    And this is what is being defined in my web.xml:

     <web-app>
      <display-name>Spring Reverse String</display-name>      
      <welcome-file-list>
          <welcome-file>reverse.jsp</welcome-file>
      </welcome-file-list>
      <servlet>
          <servlet-name>app</servlet-name>
          <servlet-class>Dispatcher</servlet-class>
          <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
            <servlet-name>app</servlet-name>
            <url-pattern>*.app</url-pattern>
      </servlet-mapping>
      <context-param>
        <param-name>contextConfigLocation</param-name>        
        <param-value>/WEB-INF/app-servlet.xml</param-value>
      </context-param>
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    </web-app>
    

    And finally, this is my ReverseString object:

    public class ReverseString {
    
    public String stringToReverse;
    public String reversedString;
    
    public ReverseString(String rawString) {
        this.reversedString = reverseString(stringToReverse);
    }
    
    public String getStringToReverse() {
        return stringToReverse;
    }
    
    public void setStringToReverse(String stringToReverse) {
        this.stringToReverse = stringToReverse;
    }
    
    public String reverseString(String rawString) {
        if(rawString == null || rawString.length() <= 1) return rawString;
        return reverseString(rawString.substring(1)) + rawString.charAt(0);
    }
    

    }

  • mgrstnr
    mgrstnr almost 11 years
    Okay, so now I have added this. @RequestMapping(value = "/reverse.html", method = RequestMethod.GET) public String simpleForm(Model model) { model.addAttribute(new ReverseString()); return "reverse"; } Instead of modelAttribute I just have commandName="reverseString" on my reverse.jsp form. I am still getting the same error.