请帮助我更好地学习Spring 3 MVC的基础知识,我试图了解Spring JSR 303:Bean Validation并且根本无法解决下面的问题,我已经花了一天多的时间了:(< / p>
我想在这里进行简单的验证。 hello.jsp中的名称,密码和电子邮件字段不能留空,这完全是目标。截至目前,每次尝试提交hello.jsp时,所有字段都为空白,遇到以下错误
HTTP状态500 - 处理程序处理失败;嵌套异常是java.lang.AbstractMethodError:org.hibernate.ejb.HibernatePersistence.getProviderUtil()Ljavax / persistence / spi / ProviderUtil;
错误堆栈:
HTTP Status 500 - Handler processing failed; nested exception is java.lang.AbstractMethodError: org.hibernate.ejb.HibernatePersistence.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;
type Exception report
message Handler processing failed; nested exception is java.lang.AbstractMethodError: org.hibernate.ejb.HibernatePersistence.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;
description The server encountered an internal error (Handler processing failed; nested exception is java.lang.AbstractMethodError: org.hibernate.ejb.HibernatePersistence.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;) that prevented it from fulfilling this request.
exception
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.AbstractMethodError: org.hibernate.ejb.HibernatePersistence.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:972)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause
java.lang.AbstractMethodError: org.hibernate.ejb.HibernatePersistence.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;
javax.persistence.Persistence$1.isLoaded(Persistence.java:78)
org.hibernate.validator.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:61)
org.hibernate.validator.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:131)
org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:46)
org.hibernate.validator.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:1242)
org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:448)
org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:397)
org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:361)
org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:313)
org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:139)
org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:101)
org.springframework.validation.DataBinder.validate(DataBinder.java:722)
org.springframework.web.method.annotation.ModelAttributeMethodProcessor.validateIfApplicable(ModelAttributeMethodProcessor.java:155)
org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:108)
org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:75)
org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:156)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:117)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
使用的所有罐子都是:
*控制器:MainController.java *
package com.poc.controller;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
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.bind.annotation.RequestParam;
import com.poc.bean.UserBean;
import com.poc.service.DaoService;
import com.poc.service.MailService;
import com.poc.service.MailServiceImpl;
import javax.validation.Valid;
@Controller
public class MainController {
@Autowired
DaoService d;
UserBean user;
@Autowired
MailService mailService;
@RequestMapping("/")
public String hello(Model model) {
return "hello";
}
@ModelAttribute("user")
public UserBean getUserForm() {
return new UserBean();
}
@RequestMapping(value = "/hi", method = RequestMethod.POST)
public String hi(@ModelAttribute("user")@Valid UserBean user,BindingResult result ) {
if (result.hasErrors()) {
return "hello";
} else {
d.insert(user);
//Send a composed mail
mailService.sendMail(user.getEmailid(), "Registration Acknowledgement", "You have successfully registered with us. Your password is "+user.getPasswd());
String message = "Hi " + user.getName() + "!";
//model.addAttribute("message", message);
return "redirect:/index";}
}
@RequestMapping("/index")
public String listContacts(Map<String, Object> map) {
map.put("user", new UserBean());
map.put("userList", d.listAll());
return "hello";
}
}
hello.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<!-- <style>
.error {
color: #ff0000;
}
.errorblock {
color: #000;
background-color: #ffEEEE;
border: 3px solid #ff0000;
padding: 8px;
margin: 16px;
}
</style> -->
<style>
.error {
color: #EF1313;
font-style: italic;
}
</style>
<head>
<title>Home</title>
</head>
<body>
<h1>Hello World!</h1>
<hr/>
<form:form action="hi" commandName="user">
<table>
<tr>
<td><font face="verdana" size="2px">Name</font></td>
<td>:</td>
<td>
<font face="verdana" size="2">
<form:input path="name" /> <form:errors path="name"></form:errors>
</font>
</td>
</tr>
<tr>
<td><font face="verdana" size="2px">Password</font></td>
<td>:</td>
<td>
<font face="verdana" size="2">
<form:input path="passwd" /> <form:errors path="passwd"></form:errors>
</font>
</td>
</tr>
<tr>
<td><font face="verdana" size="2px">Email</font></td>
<td>:</td>
<td>
<font face="verdana" size="2">
<form:input path="emailid" /> <form:errors path="emailid"></form:errors>
</font>
</td>
</tr>
<tr>
<td>
<input type="submit" value="Submit" />
</td>
</tr>
</table>
</form:form>
<h3>Users</h3>
<c:if test="${!empty userList}">
<table class = "data"><tr>
<th>Name</th>
<th>Email</th>
</tr>
<c:forEach items= "${userList}" var = "user">
<tr>
<td>
${user.name}
</td>
<td>${user.emailid}</td>
</tr>
</c:forEach>
</table>
</c:if>
</body>
</html>
请让我知道我肯定错过的地方。如果是jar兼容性问题,请提及我需要更换的罐子的名称。
提前致谢。
答案 0 :(得分:2)
您的库的版本并不真正一起玩。例如。你使用Hibernate ORM 3.2(实现JPA 1.0),而Hibernate Validator 4.2默认使用JPA 2(由Hibernate ORM 3.5实现)。请注意,类路径上的其他一些库看起来不正确:
我建议使用依赖管理工具(Ivy,Maven,Gradle)来解决这些问题。