2017-07-02 13 views
0

私は小さなSpring Mvcプロジェクトを使用していますが、POSTリクエストの処理時にエラーが発生します。エラーメッセージは、ランディングページはここで(list.jsp)とhttp://localhost:8080/usersにマッピングされ、Spring MvcフォームハンドラのNoClassDefFoundError

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

ある

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) 

、以下に提供されますAdd Userボタンを押すと、アドレスhttp://localhost:8080/users/addに転送されます。ページにはファイルuserform.jspが表示され、エラーが表示されます。各制御コードはuserform.jspページに必要なコードは、Iラインのエラーメッセージを取得し、以下

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

これを

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

が設けられている、以下

@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"; 
} 

が設けられています。 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で古いバージョンに依存しているように見えます。 – xyz

+1

pom.xmlをスローして、春のバージョンを確認してください。 –

+0

@sbjavateam問題は確かに古いバージョンの依存関係'pom.xml'ファイルにあります。私はそれらのすべてを 'RELEASE'に更新し、問題は解決しました。あなたは他のユーザーを助けることができる答えにそれを書くことができますか? – Arefe

答えて

3

class ExpressionEvaluationUtilsこれは古いクラスです.4の前にこのクラスは削除されました。あなたのようなものが表示された場合:

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

それはあなたがのpom.xmlで春のためにいくつかの古いバージョンを持っていることを意味します(このクラスがクラスパスにもはやない/最新の春バージョンで依存関係)。これを解決するには、依存関係を使用する関連するバージョンに更新するだけです。

関連する問題