我使用一个小型的Spring Mvc项目,在处理POST
请求时遇到错误。错误消息在下面提供,
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
,
相应的控制器代码,
@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("test@gmail.com");
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";
}
}
我需要更改才能正确运行它?
答案 0 :(得分:3)
class ExpressionEvaluationUtils它是旧类,在春季4之前删除了这个类。如果您看到类似的内容:
java.lang.NoClassDefFoundError: 组织/ springframework的/网络/ util的/ ExpressionEvaluationUtils
这意味着你在pom.xml中有一些旧版本的spring(在最新的spring版本中,这个类不再是classpath / dependencies)。要解决此问题,只需更新您使用的相关versrion的依赖项。