java - Bean Validation doesn't work? -
i'm looking solution problem still haven't found. in bean i'm using annotations validations doesn't work , i'm looking in internet work.
i'm using: vaadin 7 , maven
i this.
/** person's bean */ @entity public class person{ @id @generatedvalue private integer id; @notnull @notempty @size(min=5, max=50, message="insert first name") private string firstname; @notnull @notempty @email private string email; //get , set } //my app public class loginview extends verticallayout{ private textfield firstname, email; private beanfieldgroup<person> binder; private formlayout form; public loginview(){ form = new formlayout(); binder = new beanfieldgroup<person>(person.class); field<?> field = null; field = binder.buildandbind("firstname", "firstname"); firstname = (textfield)binder.getfield("firstname"); form.addcomponent(firstname); field = binder.buildandbind("email", "email"); email = (textfield)binder.getfield("email"); form.addcomponent(email); this.addcomponent(form); } }
how can work ?
/** maven dependecy */ <dependency> <groupid>com.vaadin.addon</groupid> <artifactid>beanvalidation-addon</artifactid> <version>0.6.2</version> </dependency> /** exception */ java.lang.nosuchmethoderror: com.vaadin.event.eventrouter.fireevent(ljava/util/eventobject;lcom/vaadin/server/errorhandler;)v @ com.vaadin.server.vaadinservice.onvaadinsessionstarted(vaadinservice.java:783) @ com.vaadin.server.vaadinservice.createandregistersession(vaadinservice.java:740) @ com.vaadin.server.vaadinservice.dofindorcreatevaadinsession(vaadinservice.java:696) @ com.vaadin.server.vaadinservice.findorcreatevaadinsession(vaadinservice.java:637) @ com.vaadin.server.vaadinservice.findvaadinsession(vaadinservice.java:501) @ com.vaadin.server.vaadinservice.handlerequest(vaadinservice.java:1376) @ com.vaadin.server.vaadinservlet.service(vaadinservlet.java:238) @ javax.servlet.http.httpservlet.service(httpservlet.java:727) @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:303) @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:208) @ org.apache.tomcat.websocket.server.wsfilter.dofilter(wsfilter.java:52) @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:241) @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:208) @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:220) @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:122) @ org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:501) @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:170) @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:98) @ org.apache.catalina.valves.accesslogvalve.invoke(accesslogvalve.java:950) @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:116) @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:408) @ org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:1040) @ org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:607) @ org.apache.tomcat.util.net.jioendpoint$socketprocessor.run(jioendpoint.java:315) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1145) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:615) @ java.lang.thread.run(thread.java:724)
alright, found correct implementation. i'm going show code @ end. need do:
- set actual instance of person data source binder
- get rid of field variable, it's useless in code, have firstname , email fields end adding form layout, field doesn't end anywhere.
- add button submit form , checkout error messages if there any.
here's code:
@theme("mytheme") public class myvaadinui extends ui { private field firstname, email; private formlayout form; @override public void init(vaadinrequest request){ verticallayout layout = new verticallayout(); //1. set propertyitem fieldgroup final beanfieldgroup<person> binder = new beanfieldgroup<person>(person.class); binder.setitemdatasource(new beanitem<person>(new person())); form = new formlayout(); //2. don't use field field, it's useless firstname = binder.buildandbind("firstname", "firstname"); email = binder.buildandbind("email", "email"); form.addcomponent(firstname); form.addcomponent(email); layout.addcomponent(form); //3. add button submit form form.addcomponent(new button("ok", new button.clicklistener() { @override public void buttonclick(clickevent event) { try { binder.commit(); notification.show("thanks!"); } catch (fieldgroup.commitexception e) { notification.show("you fail!"); } } })); setcontent(layout); } }
just know, used couple of different dependencies, should try own first. change code , see happens. these dependencies used:
<dependency> <groupid>org.hibernate.javax.persistence</groupid> <artifactid>hibernate-jpa-2.0-api</artifactid> <version>1.0.1.final</version> </dependency> <dependency> <groupid>org.hibernate</groupid> <artifactid>hibernate-validator</artifactid> <version>5.1.0.final</version> </dependency>
Comments
Post a Comment