Spring MVC Neither BindingResult nor plain target object for bean name

梦想与她 提交于 2019-12-30 06:49:23

问题


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

}


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



回答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.




回答3:


Try to add @ModelAttribute("reverseString") in your onSubmit method's parameters.

protected ModelAndView onSubmit(HttpServletRequest request,
        HttpServletResponse response, @ModelAttribute("reverseString") ReverseString revString, BindException errors)
        throws Exception



回答4:


For me this error was resolved by declaring

@ModelAttribute("person")
public Person createFormModelAttribute() {
    return new Person();
}

in the controller. And also on the jsp, I refer to the model attributes by referencing the class name:

<form:input  path="person.firstName" />


来源:https://stackoverflow.com/questions/16787938/spring-mvc-neither-bindingresult-nor-plain-target-object-for-bean-name

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!