2017-07-02 70 views
0

我使用一個小型Spring Mvc項目工作,在處理POST請求時出現錯誤。下面提供的錯誤消息,Spring Mvc表單處理程序中的NoClassDefFoundError

HTTP Status 500 – Internal Server Error 

Type Exception Report 

Message An exception occurred processing JSP page [/WEB-INF/jsps/users/userform.jsp] at line [26] 

Description The server encountered an unexpected condition that prevented it from fulfilling the request. 

Exception 

org.apache.jasper.JasperException: An exception occurred processing JSP page [/WEB-INF/jsps/users/userform.jsp] at line [26] 

23: 
24:  <spring:url value="/users" var="userActionUrl"/> 
25: 
26:  <form:form class="form-horizontal" method="post" modelAttribute="userForm" action="${userActionUrl}"> 
27: 
28:   <form:hidden path="id"/> 
29: 


Root Cause 

javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/springframework/web/util/ExpressionEvaluationUtils 
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:909) 
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838) 
    org.apache.jsp.WEB_002dINF.jsps.users.userform_jsp._jspService(userform_jsp.java:1278) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:263) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208) 
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:635) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

着陸頁是這裏(list.jsp)和映射到http://localhost:8080/users

enter image description here

相應的控制器代碼,

@Autowired 
    private UserService userService; 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public String showHome() { 

     logger.debug("showHome()"); 

     return "redirect:/users"; 
    } 

    @RequestMapping(value = "/users", method = RequestMethod.GET) 
    public String showAllUsers(Model model) { 

     logger.debug("showAllUsers()"); 
     model.addAttribute("users", userService.findAllUsers()); 
     return "users/list"; 
    } 

當我按Add User按鈕,它將指向地址http://localhost:8080/users/add。該頁面顯示文件userform.jsp,並從那裏獲取錯誤。相應的控制器代碼下面提供,

@RequestMapping(value = "users/add", method = RequestMethod.GET) 
public String showAddUserForm(Model model) { 

    logger.debug("showAddUserForm()"); 

    User user = new User(); 

    user.setName("mkyong123"); 
    user.setEmail("[email protected]"); 
    user.setAddress("abc 88"); 

    //user.setPassword("123"); 
    //user.setConfirmPassword("123"); 
    user.setNewsletter(true); 
    user.setSex("M"); 
    user.setFramework(new ArrayList<String>(Arrays.asList("Spring MVC", "GWT"))); 
    user.setSkill(new ArrayList<String>(Arrays.asList("Spring", "Grails", "Groovy"))); 
    user.setCountry("SG"); 
    user.setNumber(2); 

    model.addAttribute("userForm", user); 

    populateDefaultModel(model); 
    return "users/userform"; 
} 

userform.jsp頁的必要的代碼下面提供,

<form:form class="form-horizontal" method="post" modelAttribute="userForm" action="${userActionUrl}"> 

    <form:hidden path="id"/> 

    <spring:bind path="name"> 
     <div class="form-group ${status.error ? 'has-error' : ''}"> 
      <label class="col-sm-2 control-label">Name</label> 
      <div class="col-sm-10"> 
       <form:input path="name" type="text" class="form-control " id="name" placeholder="Name"/> 
       <form:errors path="name" class="control-label"/> 
      </div> 
     </div> 
    </spring:bind> 

</form:form> 

我在線路得到的錯誤消息,

<form:form class="form-horizontal" method="post" modelAttribute="userForm" action="${userActionUrl}"> 

這是控制器方法假設處理POST請求,

// save or update user 
    @RequestMapping(value = "/users", method = RequestMethod.POST) 
    public String saveOrUpdateUser(@ModelAttribute("userForm") @Validated User user, 
      BindingResult result, Model model, final RedirectAttributes redirectAttributes) { 

     logger.debug("saveOrUpdateUser() : {}", user); 

     if (result.hasErrors()) { 
      populateDefaultModel(model); 
      return "users/userform"; 
     } else { 
      redirectAttributes.addFlashAttribute("css", "success"); 

      if(user.isNew()){ 
       redirectAttributes.addFlashAttribute("msg", "User added successfully!"); 
      }else{ 
       redirectAttributes.addFlashAttribute("msg", "User updated successfully!"); 
      } 

      userService.saveOrUpdate(user); 

      // POST/REDIRECT/GET 
      return "redirect:/users/" + user.getId(); 

      // POST/FORWARD/GET 
      // return "user/list"; 
     } 
    } 

我需要更改以正確運行它?

+2

class ExpressionEvaluationUtils是舊類,看起來像你在maven中依賴於舊版verion, – xyz

+1

拋出你的pom.xml,所以我們可以看到你的春天版本 –

+0

@sbjavateam這個問題確實是由於舊版本的依賴關係在'pom.xml'文件中。我更新了所有的'RELEASE',問題就解決了。你能把它寫到一個可以幫助其他用戶的答案嗎? – Arefe

回答

3

class ExpressionEvaluationUtils它是舊類,在春季4之前,此類已刪除。如果你看到這樣的:

java.lang.NoClassDefFoundError: org/springframework/web/util/ExpressionEvaluationUtils

它意味着你有一些舊版本中的pom.xml彈簧(這個類不再在類路徑中/在最新版本的春季依賴)。要解決這個問題,只需更新您所使用的相關版本的依賴關係。