2013-05-28 4 views
5

По какой-то причине я не могу исправить эту проблему даже после просмотра нескольких примеров здесь.Spring MVC Ни BindingResult, ни простой объект-объект для bean-name

Я пытаюсь обрабатывать форму с помощью Spring 3 MVC, но я получаю следующее сообщение об ошибке:

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

Так я вроде получать то, что проблема здесь, но я не смог решить. Вот метод в моем

класса ReverseController который простирается 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; 
} 

Мое приложение-servlet.xml определяет контроллер следующим образом:

<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> 

Это форма в моем обратном направлении. 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> 

И это то, что определяется в моем 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> 

И, наконец, это мой ReverseString объект:

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

}

+0

Вы смешивали концепции Spring MVC 2.x и 3.x? - разместите полный класс контроллера. – Ralph

ответ

8

В вашем файле reverse.jsp вы добавили modelAttribute как reverseString. Итак, перед загрузкой reverse.jsp он будет искать ваш объект ReverseString.java.

Вам просто нужно добавить объект ReverseString.java в область запроса вашего метода контроллера, откуда вы перемещаете пользователя на reverse.jsp.

например.

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

Хорошо, теперь я добавил это. @RequestMapping (значение = "/reverse.html", метод = RequestMethod.GET) \t общественного Строка simpleForm (модель Модель) { \t \t модель.addAttribute (новый ReverseString()); \t \t return "reverse"; \t} Вместо modelAttribute Я просто имею командуName = "reverseString" в моей форме reverse.jsp. Я все еще получаю ту же ошибку. – mgerstner

0

Попробуйте добавить @ModelAttribute("reverseString") в параметрах вашего onSubmit метода.

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

Как я выяснил для себя это исключение, большинство случаев появляется, когда путь к контроллеру неверен. Или ошибка в синтаксисе. Поэтому очень тщательно проверяйте, все ли ссылки в jsp и пути правы. Потому что даже «/» может быть причиной исключения.

0

Для меня эта ошибка была решена, объявляя

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

в контроллере. А также на jsp, я ссылаюсь на атрибуты модели, ссылаясь на имя класса:

<form:input path="person.firstName" /> 
Смежные вопросы