私は小さなSpring Mvcプロジェクトを使用していますが、POST
リクエストの処理時にエラーが発生します。エラーメッセージは、ランディングページはここで(list.jsp
)とhttp://localhost:8080/users
にマッピングされ、Spring MvcフォームハンドラのNoClassDefFoundError
対応する制御コード、
@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";
}
}
正しく実行するには何を変更する必要がありますか?
class ExpressionEvaluationUtilsは古いクラスです。古いバージョンのMavenで古いバージョンに依存しているように見えます。 – xyz
pom.xmlをスローして、春のバージョンを確認してください。 –
@sbjavateam問題は確かに古いバージョンの依存関係'pom.xml'ファイルにあります。私はそれらのすべてを 'RELEASE'に更新し、問題は解決しました。あなたは他のユーザーを助けることができる答えにそれを書くことができますか? – Arefe