我是JSF和Java EE的新手。我試圖做我的第一個Web應用程序(Java EE + JSF + Hibernate)。JSF和SQL錯誤處理
我有「Partido」和「Equipo」類。一個Partido上有兩個Equipo。如果我想刪除已經存在於「Partido」中的「Equipo」......錯誤......約束blablabla .....
我知道這個錯誤是什麼,但我不知道如何我可以用JSF處理它(用於顯示在同一個網頁上的錯誤,或彈出消息)
問題是,當我按下從JFS視圖中刪除buton,什麼也不做,並在Eclipse中我得到異常.. 。
這是按鈕:
和代碼...
EquipoBean
package beans;
import java.sql.SQLException;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.hibernate.Hibernate;
import dao.DAOFactory;
import dao.utils.HibernateUtil;
import domain.Equipo;
import domain.Partido;
@ManagedBean
@SessionScoped
public class EquipoBean {
private Equipo equipo;
private List<Equipo> listaDeEquipos;
private boolean dirty=false;
private String selectedEquipo;
private void crearEquipo(){
equipo=new Equipo();
}
public Equipo getEquipo() {
return equipo;
}
public void setEquipo(Equipo equipo) {
this.equipo = equipo;
}
public List<Equipo> getListaDeEquipos() {
if(listaDeEquipos==null || dirty==true){
listaDeEquipos=DAOFactory.getEquipoDAO().findAll();
dirty=false;
selectedEquipo=null;
}
return listaDeEquipos;
}
public void setListaDeEquipos(List<Equipo> equipos) {
this.listaDeEquipos = equipos;
}
public String getSelectedEquipo(){return selectedEquipo; }
public void setSelectedEquipo(String selectedEquipo){this.selectedEquipo = selectedEquipo;}
public void guardar() {
HibernateUtil.beginTransaction();
DAOFactory.getEquipoDAO().save(equipo);
HibernateUtil.endTransaction();
dirty=true;
}
public void actualizar(){
if(selectedEquipo==null)
crearEquipo();
else{
equipo=DAOFactory.getEquipoDAO().findById(Integer.valueOf(selectedEquipo));
}
}
public void eliminar(ActionEvent e){
HibernateUtil.beginTransaction();
Equipo p=DAOFactory.getEquipoDAO().findById(Integer.valueOf(selectedEquipo));
DAOFactory.getEquipoDAO().remove(p);
HibernateUtil.endTransaction();
selectedEquipo=null;
dirty=true;
}
}
PartidoBean
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package beans;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import dao.DAOFactory;
import dao.utils.HibernateUtil;
import domain.Partido;
@ManagedBean
@SessionScoped
public class PartidoBean {
/**** AJAX LISTENERS ***********************************/
private String jornada;
public String getJornada() {return jornada;}
public void setJornada(String jornada) {this.jornada = jornada;}
private String equipo;
public String getEquipo(){return equipo;}
public void setEquipo(String equipo){this.equipo = equipo;}
public void filtroJornada(){
this.filtraPorJornada();
}
public void filtroEquipo(){
this.filtraPorEquipo();
}
private void filtraPorJornada(){
if(jornada.equals("Todas"))
listaDePartidos=DAOFactory.getPartidoDAO().findAll();
else
listaDePartidos=DAOFactory.getPartidoDAO().findByJornada(jornada);
}
private void filtraPorEquipo(){
if(equipo.trim().length()==0)
listaDePartidos=DAOFactory.getPartidoDAO().findAll();
else
listaDePartidos=DAOFactory.getPartidoDAO().findBySimilarEquipo(equipo);
}
/**** AJAX LISTENERS ***********************************/
public String guardaPartido(){
String equipoLocal=partido.getEquipoLocal().getNombre();
String equipoVisitante=partido.getEquipoVisitante().getNombre();
if(!equipoLocal.equals(equipoVisitante)){
guardar();
return "listado";
}
else{
return "error";
}
}
private void guardar(){
HibernateUtil.beginTransaction();
DAOFactory.getPartidoDAO().save(partido);
HibernateUtil.endTransaction();
dirty=true;
}
public void eliminar(ActionEvent e){
HibernateUtil.beginTransaction();
Partido p=DAOFactory.getPartidoDAO().findById(Integer.valueOf(selectedPartido));
DAOFactory.getPartidoDAO().remove(p);
HibernateUtil.endTransaction();
selectedPartido=null;
dirty=true;
}
private String selectedPartido;
public String getSelectedPartido(){return selectedPartido; }
public void setSelectedPartido(String selectedPartido){this.selectedPartido = selectedPartido;}
public void actualizar(){
if(selectedPartido==null)
crearPartido();
else{
partido=DAOFactory.getPartidoDAO().findById(Integer.valueOf(selectedPartido));
}
}
private void crearPartido(){
partido=new Partido();
}
/*******************************************************************/
private Partido partido;
public Partido getPartido() {
return partido;
}
public void setPartido(Partido partido) {
this.partido = partido;
}
private List<Partido> listaDePartidos;
private boolean dirty=false;
public List<Partido> getListaDePartidos() {
if(listaDePartidos==null || dirty==true){
listaDePartidos=DAOFactory.getPartidoDAO().findAll();
dirty=false;
selectedPartido=null;
}
return listaDePartidos;
}
public void setListaDePartidos(List<Partido> partidos) {
this.listaDePartidos = partidos;
}
private boolean porJugar;
public boolean isPorJugar() {
return porJugar;
}
public void setPorJugar(boolean porJugar) {
this.porJugar = porJugar;
}
}
EquipoDAOImpl
package dao;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import dao.utils.GenericHibernateDAO;
import domain.Equipo;
class EquipoDAOImpl extends GenericHibernateDAO implements EquipoDAO{
public EquipoDAOImpl(Session s) {
super(s);
}
@SuppressWarnings("unchecked")
public Equipo findById(Integer id) {
Equipo entity;
entity = (Equipo) getSession().get(Equipo.class, id);
return entity;
}
@SuppressWarnings("unchecked")
public List<Equipo> findAll() {
Query q = getSession().createQuery("From Equipo");
return q.list();
}
@Override
public void save(Equipo entity) {
getSession().saveOrUpdate(entity);
}
@Override
public void remove(Equipo entity){
getSession().delete(entity);
}
}
listEquipos.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="layout.xhtml">
<ui:define name="cuerpo">
<h:form prependId="false">
<h:panelGrid id="MainGrid" columns="1" columnClasses="columnGrid" styleClass="mainGrid">
<p:dataTable paginator="true" rows="10" id="equipos" value="#{equipoBean.listaDeEquipos}" var="equipo" columnClasses="columnTable columnTable1,columnTable columnTable2,columnTable columnTable3,columnTable columnTable4">
<p:column>
<f:facet name="header">
<h:outputText value="#{msgs['list.idEquipo']}"/>
</f:facet>
<h:outputText value="#{equipo.idEquipo}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{msgs['list.nombreEquipo']}"/>
</f:facet>
<h:outputText value="#{equipo.nombre}" >
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{msgs['list.direccionEquipo']}"/>
</f:facet>
<h:outputText value="#{equipo.direccion}" />
</p:column>
<p:column >
<f:facet name="header">
<h:outputText value="#{msgs['equipo.operaciones']}"/>
</f:facet>
<h:panelGroup>
<p:commandButton value="#{msgs['equipo.eliminar']}" onclick="PF('confirmation').show();" >
<f:setPropertyActionListener value="#{equipo.idEquipo}" target="#{equipoBean.selectedEquipo}" />
</p:commandButton>
<p:button value="#{msgs['equipo.editar']}" outcome="editar">
<f:param name="selectedEquipo" value="#{equipo.idEquipo}" />
</p:button>
</h:panelGroup>
</p:column>
</p:dataTable>
</h:panelGrid>
<h:panelGrid columns="2">
<p:commandButton ajax="false" value="#{msgs['list.equipos']}" action="listado" />
<p:commandButton ajax="false" value="#{msgs['equipo.nuevo']}" action="editar" />
</h:panelGrid>
<p:confirmDialog message="#{msgs['equipo.seguroBorrar']}"
showEffect="bounce" hideEffect="explode"
severity="alert" widgetVar="confirmation">
<p:commandButton update="MainGrid" process="@this" value="#{msgs['lista.si']}" actionListener="#{equipoBean.eliminar}" oncomplete="PF('confirmation').hide()"/>
<p:commandButton value="#{msgs['lista.no']}" onclick="PF('confirmation').hide()" />
</p:confirmDialog>
</h:form>
</ui:define>
</ui:composition>
堆棧跟蹤
ADVERTENCIA: /listEquipos.xhtml @65,164 actionListener="#{equipoBean.eliminar}": org.hibernate.exception.ConstraintViolationException: could not execute statement
javax.el.ELException: /listEquipos.xhtml @65,164 actionListener="#{equipoBean.eliminar}": org.hibernate.exception.ConstraintViolationException: could not execute statement
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:147)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:813)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:72)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:190)
at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:62)
at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3400)
at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3630)
at org.hibernate.action.internal.EntityDeleteAction.execute(EntityDeleteAction.java:114)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:463)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:349)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
at dao.utils.HibernateUtil.endTransaction(HibernateUtil.java:30)
at beans.EquipoBean.eliminar(EquipoBean.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:245)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:277)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
... 32 more
Caused by: java.sql.SQLIntegrityConstraintViolationException: violación del restricción de integridad: sin acción para la clave foránea; SYS_FK_10097 table: JUGADORES
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:187)
... 53 more
nov 21, 2014 3:36:30 AM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
GRAVE: org.hibernate.exception.ConstraintViolationException: could not execute statement
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:72)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:190)
at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:62)
at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3400)
at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3630)
at org.hibernate.action.internal.EntityDeleteAction.execute(EntityDeleteAction.java:114)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:463)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:349)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
at dao.utils.HibernateUtil.endTransaction(HibernateUtil.java:30)
at beans.EquipoBean.eliminar(EquipoBean.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:245)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:277)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:147)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:813)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLIntegrityConstraintViolationException: violación del restricción de integridad: sin acción para la clave foránea; SYS_FK_10097 table: JUGADORES
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:187)
... 53 more
任何幫助嗎?
你有沒有看過這個---> http://stackoverflow.com/q/13892473/1055089? – Vrushank 2014-11-21 06:19:19
經過長時間閱讀很多網頁之後,我想我遇到了一個JSF和Ajax的問題,它處理錯誤。我試圖做出另一個沒有AJAX的命令按鈕,我可以得到webapp的異常(在web和eclipse ide中可視化)。我將在這個主題中獲得更多的深入,但如果有人有更多的信息,將不勝感激:) – 2014-11-21 17:33:45