jsf - javax.validation.ConstraintViolationException -
i using jsf+jpa iam not fix error:
javax.validation.constraintviolationexception: bean validation constraint(s) violated while executing automatic bean validation on callback event:'prepersist'. please refer embedded constraintviolations details.
@managedbean(name = "clientcon") public class clientcontroller { @postconstruct public void init() { system.out.println("salam"); clients = new clients(); } private entitymanagerfactory emf = null; public clientcontroller() { emf = persistence.createentitymanagerfactory("clinicprojectpu"); } private list<clients> clientlist; private clients clients; public entitymanager getentitymanager() { return emf.createentitymanager(); } public clients getclients() { return clients; } public void setclients(clients clients) { this.clients = clients; } public list<clients> getclientlist() { this.clientlist = getentitymanager().createnamedquery("clients.findall").getresultlist(); return clientlist; } public void createclient() { entitymanager em = null; try { em = getentitymanager(); em.gettransaction().begin(); em.persist(clients); // interesting method em.flush(); em.gettransaction().commit(); system.out.println("created"); } catch (exception ex) { ex.printstacktrace(); } { if (em != null) { em.close(); } } } }
<h:form> <fieldset> <h:panelgrid columns="2"> <h:outputtext value="ad" style="color: #0099cc"/> <h:inputtext class="form-client" value="#{clientcon.clients.name}" /> <h:outputtext value="soyad" style="color: #0099cc" /> <h:inputtext class="form-client" value="#{clientcon.clients.surname}" /> <h:outputtext value="telefon" style="color: #0099cc" /> <h:inputtext class="form-client" value="#{clientcon.clients.phone}" /> </h:panelgrid> <div class="btns"> <center><h:commandbutton action="#{clientcon.createclient()}" value="saxla" style="width: 60%;margin-top: 5%;border-radius: 5px;color: #ffffff;background-color: #0099cc" /></center> </div> </fieldset> </h:form>
javax.validation.constraintviolationexception: bean validation constraint(s) violated while executing automatic bean validation on callback event:'prepersist'. please refer embedded constraintviolations details. @ org.eclipse.persistence.internal.jpa.metadata.listeners.beanvalidationlistener.validateoncallbackevent(beanvalidationlistener.java:90) @ org.eclipse.persistence.internal.jpa.metadata.listeners.beanvalidationlistener.prepersist(beanvalidationlistener.java:62) @ org.eclipse.persistence.descriptors.descriptoreventmanager.notifylistener(descriptoreventmanager.java:748) @ org.eclipse.persistence.descriptors.descriptoreventmanager.notifyejb30listeners(descriptoreventmanager.java:691) @ org.eclipse.persistence.descriptors.descriptoreventmanager.executeevent(descriptoreventmanager.java:229) @ org.eclipse.persistence.internal.sessions.unitofworkimpl.registernewobjectclone(unitofworkimpl.java:4310) @ org.eclipse.persistence.internal.sessions.unitofworkimpl.registernotregisterednewobjectforpersist(unitofworkimpl.java:4287) @ org.eclipse.persistence.internal.sessions.repeatablewriteunitofwork.registernotregisterednewobjectforpersist(repeatablewriteunitofwork.java:518) @ org.eclipse.persistence.internal.sessions.unitofworkimpl.registernewobjectforpersist(unitofworkimpl.java:4229) @ org.eclipse.persistence.internal.jpa.entitymanagerimpl.persist(entitymanagerimpl.java:496) @ controller.clientcontroller.createclient(clientcontroller.java:69) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:606) @ javax.el.elutil.invokemethod(elutil.java:326) @ javax.el.beanelresolver.invoke(beanelresolver.java:536) @ javax.el.compositeelresolver.invoke(compositeelresolver.java:256) @ com.sun.el.parser.astvalue.invoke(astvalue.java:269) @ com.sun.el.methodexpressionimpl.invoke(methodexpressionimpl.java:304) @ com.sun.faces.facelets.el.tagmethodexpression.invoke(tagmethodexpression.java:105) @ javax.faces.component.methodbindingmethodexpressionadapter.invoke(methodbindingmethodexpressionadapter.java:87) @ com.sun.faces.application.actionlistenerimpl.processaction(actionlistenerimpl.java:102) @ javax.faces.component.uicommand.broadcast(uicommand.java:315) @ javax.faces.component.uiviewroot.broadcastevents(uiviewroot.java:790) @ javax.faces.component.uiviewroot.processapplication(uiviewroot.java:1282) @ com.sun.faces.lifecycle.invokeapplicationphase.execute(invokeapplicationphase.java:81) @ com.sun.faces.lifecycle.phase.dophase(phase.java:101) @ com.sun.faces.lifecycle.lifecycleimpl.execute(lifecycleimpl.java:198) @ javax.faces.webapp.facesservlet.service(facesservlet.java:646) @ org.apache.catalina.core.standardwrapper.service(standardwrapper.java:1682) @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:318) @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:160) @ org.apache.catalina.core.standardpipeline.doinvoke(standardpipeline.java:734) @ org.apache.catalina.core.standardpipeline.invoke(standardpipeline.java:673) @ com.sun.enterprise.web.webpipeline.invoke(webpipeline.java:99) @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:174) @ org.apache.catalina.connector.coyoteadapter.doservice(coyoteadapter.java:357) @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:260) @ com.sun.enterprise.v3.services.impl.containermapper.service(containermapper.java:188) @ org.glassfish.grizzly.http.server.httphandler.runservice(httphandler.java:191) @ org.glassfish.grizzly.http.server.httphandler.dohandle(httphandler.java:168) @ org.glassfish.grizzly.http.server.httpserverfilter.handleread(httpserverfilter.java:189) @ org.glassfish.grizzly.filterchain.executorresolver$9.execute(executorresolver.java:119) @ org.glassfish.grizzly.filterchain.defaultfilterchain.executefilter(defaultfilterchain.java:288) @ org.glassfish.grizzly.filterchain.defaultfilterchain.executechainpart(defaultfilterchain.java:206) @ org.glassfish.grizzly.filterchain.defaultfilterchain.execute(defaultfilterchain.java:136) @ org.glassfish.grizzly.filterchain.defaultfilterchain.process(defaultfilterchain.java:114) @ org.glassfish.grizzly.processorexecutor.execute(processorexecutor.java:77) @ org.glassfish.grizzly.nio.transport.tcpniotransport.fireioevent(tcpniotransport.java:838) @ org.glassfish.grizzly.strategies.abstractiostrategy.fireioevent(abstractiostrategy.java:113) @ org.glassfish.grizzly.strategies.workerthreadiostrategy.run0(workerthreadiostrategy.java:115) @ org.glassfish.grizzly.strategies.workerthreadiostrategy.access$100(workerthreadiostrategy.java:55) @ org.glassfish.grizzly.strategies.workerthreadiostrategy$workerthreadrunnable.run(workerthreadiostrategy.java:135) @ org.glassfish.grizzly.threadpool.abstractthreadpool$worker.dowork(abstractthreadpool.java:564) @ org.glassfish.grizzly.threadpool.abstractthreadpool$worker.run(abstractthreadpool.java:544) @ java.lang.thread.run(thread.java:724)
to know caused constraint violation, can use following validator , logger.
validatorfactory factory = validation.builddefaultvalidatorfactory(); validator validator = factory.getvalidator(); set<constraintviolation<clients>> constraintviolations = validator.validate(clients); if (constraintviolations.size() > 0 ) { system.out.println("constraint violations occurred.."); (constraintviolation<clients> contraints : constraintviolations) { system.out.println(contraints.getrootbeanclass().getsimplename()+ "." + contraints.getpropertypath() + " " + contraints.getmessage()); } }
put logger before persisting entity. between
em.gettransaction().begin(); //here goes validator em.persist(clients);
compile , run. console show you, before exception stack trace, element(s) caused violation(s).
you can should catch try block containing persistence method constraintviolationexception
(to avoid further problems and/or inform user error occurred , reason). however, in built system there shouldn't constraint violation exception during persistence. in jsf, , other mvc framework, validation step must totally or partially done @ client side before submit/persistence. that's practice say.
Comments
Post a Comment