Thi*_*ker 0 jpa exception vaadin bean-validation classnotfoundexception
我一直在尝试Vaadin 7.首先,我必须管理我在Vaadin安静的一个菜鸟并且对JAVA持久性不太熟悉.因此,我正在尝试学习bean验证以及如何使用它.我已经按照几个教程,但很难确定哪个是Vaadin 7的最新和正确的.尽管如此,我尝试下载并使用JPA容器和BeanValidator,我无法让它工作.这是我正在使用的代码:
package com.example.firstvaadin;
import java.io.Serializable;
import org.hibernate.validator.constraints.Email;
import javax.validation.constraints.*;
public class RegisterBean implements Serializable{
public RegisterBean(String email){
this.email = email;
}
@Size(min = 5, max = 50)
private String email;
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
}
Run Code Online (Sandbox Code Playgroud)
和
RegisterBean rbean = new RegisterBean("");
BeanItem<RegisterBean> item = new BeanItem<RegisterBean>(rbean);
TextField email = new TextField("email",item.getItemProperty("email"));
email.setImmediate(true);
layout.addComponent(email);
email.setNullRepresentation("");
Run Code Online (Sandbox Code Playgroud)
但是我在下面的代码中遇到了运行时异常:email.addValidator(new BeanValidator(RegisterBean.class,"email"));
The exception is:
aused by: com.vaadin.event.ListenerMethod$MethodException: Invocation of method buttonClick in com.example.firstvaadin.LoginView$1 failed.
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:528)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:167)
at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:984)
at com.vaadin.ui.Button.fireClick(Button.java:367)
at com.vaadin.ui.Button$1.click(Button.java:56)
... 28 more
Caused by: java.lang.NoClassDefFoundError: javax/validation/MessageInterpolator$Context
at com.example.firstvaadin.RegisterView.<init>(RegisterView.java:55)
at com.example.firstvaadin.LoginView$1.buttonClick(LoginView.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508)
... 32 more
Caused by: java.lang.ClassNotFoundException: javax.validation.MessageInterpolator$Context
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
... 39 more
Run Code Online (Sandbox Code Playgroud)
我不知道缺少哪些类,我添加了hibernate jar和validation-api.jar
有人可以帮我一把吗?
此外,这是一个jar文件列表,它位于/ WebContent/WEB-INF/lib目录中,并在Eclipse中作为类路径添加.
classmate-0.8.0.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-search-engine-4.3.0.Alpha1.jar
hibernate-search-orm-4.3.0.Alpha1.jar
hibernate-validator-5.0.0.Final.jar
hibernate-validator-annotation-processor-5.0.0.Final.jar
hibernate-validator-cdi-5.0.0.Final.jar
javax.el-2.2.4.jar
javax.el-api-2.2.4.jar
jboss-logging-3.1.1.GA.jar
joda-time-2.1.jar
jsoup-1.7.1.jar
log4j-1.2.17.jar
mysql-connector-java-5.1.22-bin.jar
vaadin-sqlcontainer-1.1.0.jar
validation-api-1.0.0.GA.jar
validation-api-1.1.0.Final.jar
Run Code Online (Sandbox Code Playgroud)
classnotfound异常消失但现在又有一个新异常:
java.lang.NoSuchMethodError:javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider; org.hibernate.valider.engine.VeridatorFactoryImpl.(ValidatorFactoryImpl.java:113)位于org.hibernate.valider.enild.engine.ConfigurationImpl的org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:45). buildValidatorFactory(ConfigurationImpl.java:217)位于com.vaadin.data.validator的com.vaadin.data.validator.BeanValidator.getJavaxBeanValidatorFactory(BeanValidator.java:167)的javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111) com.vaadin.data.validator.BeanValidator.validate(BeanValidator.java:115)中的.BeanValidator.getJavaxBeanValidator(BeanValidator.java:182)位于com的com.vaadin.ui.AbstractField.validate(AbstractField.java:935). com.vaadin.ui.AbstractField.getErrorMessage(AbstractField.java:1009)上的com.vaadin.ui.AbstractComponent.beforeClientResponse(AbstractComponent.java:650)中的vaadin.ui.AbstractField.validate(AbstractField.java:900) .vaadin.ui.AbstractField.beforeClientResponse(AbstractField.java:1643)com.vaadin.ui.AbstractTextField.beforeClientResponse(AbstractTextField.java:100)at com.vaadin.server.AbstractCommunicationManager.writeUidlResponse(AbstractCommunicationManager.java:799)at com.vaadin.server.AbstractCommunicationManager.paintAfterVariableChanges(AbstractCommunicationManager.java) :728)com.vaadin.server.AbstractCommunicationManager.handleUidlRequest(AbstractCommunicationManager.java:599)at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:315)at com.vaadin.server.VaadinServlet.service(VaadinServlet. java:201)at ork.apache.atache.atvice.httpServ.device(HttpServlet.java:728)atg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)at org.apache.catalina.core.ApplicationFilterChain .doFilter(ApplicationFilterChain.java:210)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)at org. apache.c atal.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)atg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 99)org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)org.apache.catalina.connector.CoyoteAdapter .service(CoyoteAdapter.java:407)org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589)at org. apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:312)at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:895)at java.util.concurrent.ThreadPoolExecutor $ Worker.在java.lang.Thread.run上运行(ThreadPoolExecutor.java:918)(Thread.java:680)
我敢肯定你已经解决了你的问题,但是对于其他人来说这么晚(我是)并且还使用Vaadin 7 Framework,Vaadin Bean Validator与Vaadin 7不兼容,只有下载时提到的Vaadin 6这里的页面:
https://vaadin.com/directory#addon/vaadin-bean-validation
即使在他们自己的演示(jpacontainer-addressbook-demo)中,他们也使用pom.xml中的hibernate-validator:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
希望这能帮助别人,因为它有我.