2016-09-16 4 views
1

방금 ​​봄을 읽기 시작했습니다. org.springframework.web.bind.ServletRequestDataBinder가 org.springframework.web.bind.support.WebRequestDataBinder 문제로 캐스팅 될 수 없습니다.org.springframework.web.bind.ServletRequestDataBinder는 org.springframework.web.bind.support.WebRequestDataBinder로 캐스트 할 수 없습니다.

예외

다음

java.lang.ClassCastException: org.springframework.web.bind.ServletRequestDataBinder cannot be cast to org.springframework.web.bind.support.WebRequestDataBinder 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:754) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:744) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:296) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:163) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:354) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:342) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:763) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:709) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:613) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:536) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

근본 원인 코드를입니다

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.ClassCastException: org.springframework.web.bind.ServletRequestDataBinder cannot be cast to org.springframework.web.bind.support.WebRequestDataBinder 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:625) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:536) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

학생 콩

public class Student { 
    private int age,id; 
    private String name; 
    public int getAge() { 
     return age; 
    } 
    public void setAge(int age) { 
     this.age = age; 
    } 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

StudentController

,
import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
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 
public class StudentController { 
    @RequestMapping(value="/student",method=RequestMethod.GET) 
    public ModelAndView student(){ 
     return new ModelAndView("student","command",new Student()); // (view name, logical name to access in view, object model) 
    } 

    @RequestMapping(value="/addstudent",method=RequestMethod.POST) 
    public String addStudent(@ModelAttribute("Student")Student student,ModelMap model){ 
     model.addAttribute("name",student.getName()); 
     model.addAttribute("age",student.getAge()); 
     model.addAttribute("id",student.getId()); 

     return "result"; 
    } 
} 

Student.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Spring MVC form Handling</title> 
</head> 
<body> 
    <h2>Student Information</h2> 

    <form:form method="POST" action="/SpringFormHandling/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> 

내가 localhost를 시도 : 8080/MyApp를/학생, student.jsp 페이지가 반환되고 양식을 제출 한 후에는 result.jsp로 리디렉션 및이를 표시해야합니다 채워진 데이터가 있지만 양식을 제출할 때 ClassCastException을 던지고 있습니다. 나는 어떤 단서도 얻지 못했던 것을 많이 시도했습니다. 전체 예제가 있습니다 https://www.tutorialspoint.com/spring/spring_mvc_form_handling_example.htm

+0

코드가 "작동하지 않는 방법"에 대해 자세히 설명해 주시겠습니까? 당신은 무엇을 기대하고 있었고 실제로 무슨 일이 일어 났습니까? 예외/오류가있는 경우 발생한 행을 게시하고 예외/오류 세부 정보를 게시하십시오. 이 세부 정보를 입력하거나 편집하지 않으면 도움이되지 않을 수 있습니다. – FrankerZ

+0

에서 지금 확인하실 수있는 질문이 업데이트되었습니다. 이 예제를 복사하고있는 링크가 있습니다 –

답변

1

이것은 대개 클래스 패스에 같은 클래스의 여러 버전이있을 때 발생합니다 (예를 들어, 이전 버전의 Spring MVC를 추가 한 Apache Tiles와 같은 문제가있는 경우).

webapp lib 폴더에있는 jar를 확인하는 것이 좋습니다. 또는 Eclipse와 같은 IDE를 사용하여 "Open Type"대화 상자를 표시하고 클래스 이름을 입력하면 여러 버전이있는 경우 해당 이름이 표시됩니다.

+0

예, jar의 다른 버전을 사용하고 있었으므로 jar 호환성 문제가있었습니다. 나는 모든 항아리의 동일한 버전을 사용하여 그것을 해결했다. –