2013-05-28 23 views
5

Vì một lý do nào đó tôi dường như không thể khắc phục vấn đề này, ngay cả sau khi xem nhiều ví dụ ở đây.Spring MVC Cả BindingResult lẫn đối tượng mục tiêu đơn giản cho tên bean

Tôi cố gắng để xử lý một hình thức sử dụng Spring 3 MVC, nhưng tôi nhận được lỗi sau:

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

Vì vậy, tôi loại nhận vấn đề ở đây là gì, nhưng tôi thất bại trong việc giải quyết nó. Dưới đây là phương pháp trong lớp ReverseController

của tôi kéo dài 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 xác định bộ điều khiển như sau:

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

Đây là hình thức ngược lại tôi. 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> 

Và đây là những gì đang được xác định trong web.xml của tôi:

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

Và cuối cùng, đây là đối tượng ReverseString tôi:

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

Bạn có trộn lẫn các khái niệm Spring MVC 2.x và 3.x không? - xin vui lòng gửi các lớp điều khiển hoàn chỉnh. – Ralph

Trả lời

8

Trong tệp reverse.jsp, bạn đã thêm modelAttribute làm reverseString. Vì vậy, trong khi trước khi tải reverse.jsp, nó sẽ tìm đối tượng ReverseString.java của bạn.

Bạn chỉ cần thêm đối tượng ReverseString.java trong phạm vi yêu cầu của phương thức điều khiển của bạn từ nơi bạn điều hướng người dùng đến reverse.jsp.

ví dụ:

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

Được rồi, vậy bây giờ tôi đã thêm phần này. @RequestMapping (value = "/reverse.html", method = RequestMethod.GET) \t public String simpleForm (model Model) { \t \t mô hình.addAttribute (new ReverseString()); \t \t trả về "đảo ngược"; \t} Thay vì modelAttribute Tôi chỉ có commandName = "reverseString" trên biểu mẫu reverse.jsp của mình. Tôi vẫn nhận được lỗi tương tự. – mgerstner

0

Cố gắng thêm @ModelAttribute("reverseString") trong các thông số phương pháp onSubmit của bạn.

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

Vì tôi đã tự phát hiện ra ngoại lệ của mình, hầu hết các trường hợp xuất hiện khi đường dẫn đến bộ điều khiển sai. Hoặc sai lầm trong cú pháp. Vì vậy, rất cẩn thận kiểm tra xem tất cả các liên kết trong jsp và đường dẫn là đúng. Bởi vì ngay cả '/' có thể là lý do ngoại lệ.

0

Đối với tôi lỗi này đã được giải quyết bằng cách tuyên bố

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

trong bộ điều khiển. Và cũng trên jsp, tôi tham khảo các thuộc tính mô hình bằng cách tham chiếu tên lớp:

<form:input path="person.firstName" /> 
Các vấn đề liên quan