我有一个汇总CRUD的表,但它只能插入记录,但不能编辑和删除它们。
我一直在多次审查代码,但无法找到解释,因为在这些情况下,失败可能是愚蠢的,但我很沮丧并被要求帮助你。
它的特点是名为idlocalidadpadre的列可能会也可能不会引用idlocalidad列(这是因为它们可以分组)。
DAO代码如下:
package daosimplementaciones;
import daos.LocalidadesDao;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import pojos.Localidades;
import utiles.HibernateUtil;
public class LocalidadesDaoImp implements LocalidadesDao {
@Override
public void registrar(Localidades localidad) {
Session sesion = null;
try {
sesion = HibernateUtil.getSessionFactory().openSession();
sesion.beginTransaction();
sesion.save(localidad);
sesion.getTransaction().commit();
} catch (Exception e) {
sesion.getTransaction().rollback();
} finally {
if (sesion != null) {
sesion.close();
}
}
}
**@Override
public void modificar(Localidades localidad) {
Session sesion = null;
try {
sesion = HibernateUtil.getSessionFactory().openSession();
sesion.beginTransaction();
sesion.update(localidad);
sesion.getTransaction().commit();
} catch (Exception e) {
sesion.getTransaction().rollback();
} finally {
if (sesion != null) {
sesion.close();
}
}
}
@Override
public void eliminar(Localidades localidad) {
Session sesion = null;
try {
sesion = HibernateUtil.getSessionFactory().openSession();
sesion.beginTransaction();
sesion.delete(localidad);
sesion.getTransaction().commit();
} catch (Exception e) {
sesion.getTransaction().rollback();
} finally {
if (sesion != null) {
sesion.close();
}
}
}**
@Override
public List<Localidades> verLocalidades() {
List<Localidades> listaLocalidades = null;
Session sesion = HibernateUtil.getSessionFactory().openSession();
Transaction transaccion = sesion.beginTransaction();
String hql = "FROM Localidades";
//String hql = "SELECT l.idlocalidad, l.descripcion, l.esrural, l.iddistrito, l1.Descripcion FROM localidades l LEFT OUTER JOIN localidades l1 ON l.`idlocalidadpadre` = l1.`idlocalidad`";
try {
listaLocalidades = sesion.createQuery(hql).list();
transaccion.commit();
//sesion.close();
} catch (Exception e) {
transaccion.rollback();
}finally{
if(sesion != null){
//sesion.close();
}
}
return listaLocalidades;
}
@Override
public Localidades verLocalidad(int idLocalidad){
Query consulta = null;
Session sesion = HibernateUtil.getSessionFactory().openSession();
try{
String hql = "FROM Localidades WHERE IdLocalidad=:idLocalidad";
consulta = sesion.createQuery(hql);
consulta.setParameter("idLocalidad", idLocalidad);
sesion.getTransaction().commit();
sesion.close();
}catch(Exception e){
sesion.getTransaction().rollback();
}finally{
if(sesion != null){
sesion.close();
}
}
return (Localidades) consulta.uniqueResult();
}
@Override
public String verNombreLocalidadPadre(Integer idLocalidadPadre) {
Integer idLocParametro;
idLocParametro = idLocalidadPadre;
if(idLocParametro == null){
idLocParametro = 0;
}
Query consulta = null;
Session sesion = HibernateUtil.getSessionFactory().openSession();
sesion.getTransaction().begin();
try{
String hql = "SELECT descripcion FROM Localidades WHERE IdLocalidad=:idLoc";
consulta = sesion.createQuery(hql);
consulta.setParameter("idLoc", idLocParametro);
sesion.getTransaction().commit();
//sesion.close();
}catch(Exception e){
//sesion.getTransaction().rollback();
}finally{
if(sesion != null){
//sesion.close();
}
}
try{
String resultado = (String) consulta.uniqueResult();
return resultado;
}catch(NullPointerException npe){
return "";
}
//return (String) consulta.uniqueResult();
}
}
使用方法“verNombreLocalidadPadre”以便不查看idlocalidadpadre列的位置代码,但是它的描述就在眼前。
Bean驱动程序代码如下:
package beans;
import daos.LocalidadesDao;
import daosimplementaciones.LocalidadesDaoImp;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import pojos.Localidades;
@ManagedBean
@ViewScoped
public class LocalidadesBean implements Serializable {
private List<Localidades> listaLocalidades;
private Localidades localidad;
/**
* Creates a new instance of LocalidadesBean
*/
public LocalidadesBean() {
localidad = new Localidades();
}
public List<Localidades> getListaLocalidades() {
LocalidadesDao lDao = new LocalidadesDaoImp();
listaLocalidades = lDao.verLocalidades();
return listaLocalidades;
}
public void setListaLocalidades(List<Localidades> listaLocalidades) {
this.listaLocalidades = listaLocalidades;
}
public Localidades getLocalidad() {
return localidad;
}
public void setLocalidad(Localidades localidad) {
this.localidad = localidad;
}
//A partir de acá tenemos los métodos que vamos a utilizar
public void prepararNuevaLocalidad(){
localidad = new Localidades();
}
public void nuevaLocalidad(){
LocalidadesDao lDao = new LocalidadesDaoImp();
lDao.registrar(localidad);
this.localidad = new Localidades();
}
public String nombreDeLocalidadPadre(int idLocalidadPadre){
LocalidadesDao lDao = new LocalidadesDaoImp();
return lDao.verNombreLocalidadPadre(idLocalidadPadre);
}
**public void modificarLocalidad(){
LocalidadesDao lDao = new LocalidadesDaoImp();
lDao.modificar(localidad);
localidad = new Localidades();
}
public void eliminarLocalidad(){
LocalidadesDao lDao = new LocalidadesDaoImp();
lDao.eliminar(localidad);
localidad = new Localidades();
}**
}
最后,视图代码如下:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<body>
<ui:composition template="./../../plantilla/plantilla.xhtml">
<ui:define name="content">
<h2>Detalle de Localidades</h2>
<h:form>
<p:commandButton value="Nueva Localidad" actionListener="#{localidadesBean.prepararNuevaLocalidad()}" oncomplete="PF('dialogoNuevaLocalidad').show();" update=":formNuevaLocalidad"/>
</h:form>
<h:form id="formMostrarLocalidades">
<p:dataTable id="tablaLocalidades" var="loc" value="#{localidadesBean.listaLocalidades}" paginator="true" paginatorPosition="top" emptyMessage="No hay datos de Localidades">
<p:column headerText="Número de Localidad">
<h:outputText value="#{loc.idlocalidad}"/>
</p:column>
<p:column headerText="Nombre de Localidad">
<h:outputText value="#{loc.descripcion}"/>
</p:column>
<p:column headerText="¿Es Rural?">
<!--<h:outputText value="#{loc.esrural}"/>-->
<h:selectBooleanCheckbox disabled="true" />
</p:column>
<p:column headerText="Distrito">
<h:outputText value="#{loc.iddistrito}"/>
</p:column>
<p:column headerText="Agrupada con">
<h:outputText value="#{localidadesBean.nombreDeLocalidadPadre(loc.idlocalidadpadre)}"/>
<!--<h:outputText value="#{loc.idlocalidadpadre}"/>-->
</p:column>
<p:column headerText="Modificar">
<p:commandButton value="Modificar" oncomplete="PF('dialogoModificarLocalidad').show();" update=":formModificarLocalidad">
<f:setPropertyActionListener target="#{localidadesBean.localidad}" value="#{loc}"/>
</p:commandButton>
</p:column>
<p:column headerText="Eliminar">
<p:commandButton value="Eliminar" oncomplete="PF('dialogoEliminarLocalidad').show();" update=":formEliminarLocalidad">
<f:setPropertyActionListener target="#{localidadesBean.localidad}" value="#{loc}"/>
</p:commandButton>
</p:column>
</p:dataTable>
</h:form>
<!-- Formulario para agregar Localidades -->
<h:form id="formNuevaLocalidad">
<p:dialog id="dlgNuevaLocalidad" widgetVar="dialogoNuevaLocalidad" resizable="false" showEffect="explode" hideEffect="explode" modal="true">
<p:panelGrid columns="2" style="margin: 0 auto;">
<p:outputLabel value="Nombre de Localidad:"/>
<p:inputText value="#{localidadesBean.localidad.descripcion}"/>
<p:outputLabel value="¿Es Rural?:"/>
<!--<p:inputText value="#{localidadesBean.localidad.esrural}"/>-->
<p:selectOneMenu value="#{localidadesBean.localidad.esrural}" >
<f:selectItem itemValue="0" itemLabel="No"/>
<f:selectItem itemValue="1" itemLabel="Si"/>
</p:selectOneMenu>
<p:outputLabel value="Distrito:"/>
<p:inputText value="#{localidadesBean.localidad.iddistrito}"/>
<p:outputLabel value="Agrupada con:"/>
<p:selectOneMenu value="#{localidadesBean.localidad.idlocalidadpadre}" >
<f:selectItem itemLabel="Localidad de la que depende:" itemValue=""/>
<f:selectItems var = "locPadre" value="#{localidadesBean.listaLocalidades}" itemValue ="#{locPadre.idlocalidad}" itemLabel = "#{locPadre.descripcion}"/>
</p:selectOneMenu>
</p:panelGrid>
<p:commandButton value="Guardar" actionListener="#{localidadesBean.nuevaLocalidad()}" update=":formMostrarLocalidades:tablaLocalidades" oncomplete="PF('dialogoNuevaLocalidad').hide();"/>
<p:commandButton value="Cancelar" onclick="PF('dialogoNuevaLocalidad').hide();"/>
</p:dialog>
</h:form>
**<!-- Formulario para Modificar Localidades -->
<h:form id="formModificarLocalidad">
<p:dialog id="dlgModificarLocalidad" widgetVar="dialogoModificarLocalidad" resizable="false" showEffect="explode" hideEffect="explode" modal="true">
<p:panelGrid columns="2" style="margin: 0 auto;">
<p:outputLabel value="Nombre de Localidad:"/>
<p:inputText value="#{localidadesBean.localidad.descripcion}"/>
<p:outputLabel value="¿Es Rural?:"/>
<!--<p:inputText value="#{localidadesBean.localidad.esrural}"/>-->
<p:selectOneMenu value="#{localidadesBean.localidad.esrural}" >
<f:selectItem itemValue="0" itemLabel="No"/>
<f:selectItem itemValue="1" itemLabel="Si"/>
</p:selectOneMenu>
<p:outputLabel value="Distrito:"/>
<p:inputText value="#{localidadesBean.localidad.iddistrito}"/>
<p:outputLabel value="Agrupada con:"/>
<p:selectOneMenu value="#{localidadesBean.localidad.idlocalidadpadre}" >
<f:selectItem itemLabel="Localidad de la que depende:" itemValue=""/>
<f:selectItems var = "locPadre" value="#{localidadesBean.listaLocalidades}" itemValue ="#{locPadre.idlocalidad}" itemLabel = "#{locPadre.descripcion}"/>
</p:selectOneMenu>
</p:panelGrid>
<p:commandButton value="Guardar" actionListener="#{localidadesBean.modificarLocalidad()}" update=":formMostrarLocalidades:tablaLocalidades" oncomplete="PF('dialogoModificarLocalidad').hide();"/>
<p:commandButton value="Cancelar" onclick="PF('dialogoModificarLocalidad').hide();"/>
</p:dialog>
</h:form>**
**<!-- Formulario para Eliminar Localidades -->
<h:form id="formEliminarLocalidad">
<p:dialog id="dlgEliminarLocalidad" widgetVar="dialogoEliminarLocalidad" resizable="false" showEffect="explode" hideEffect="explode" modal="true">
<h:outputText value="¿Realmente desea eliminar este registro? "/>
<p:commandButton value="Si" actionListener="#{localidadesBean.eliminarLocalidad()}" update=":formMostrarLocalidades:tablaLocalidades" oncomplete="PF('dialogoEliminarLocalidad').hide();"/>
<p:commandButton value="No" type="button" onclick="PF('dialogoEliminarLocalidad').hide();"/>
</p:dialog>
</h:form>**
</ui:define>
</ui:composition>
</body>
</html>
正如我所说,新记录的创建工作完美,但编辑和删除。
当我想进行最后两次操作时,不会发生任何错误,但都没有执行任何操作。
当然,我感谢你的关注。
Gustavo Echenique
完整的代码在这里: https://mega.nz/#F!wdImUCzY!GromEmYACoaJdDheeibMug
答案 0 :(得分:-1)
错误发生在DAO的方法“verLocalidades”中,因为它表示注销并且从未这样做过。
这导致了一个新的会话,hibernate没有打开记录,抛出了一个没有显示的错误。
错误代码:
Error:(103, 8) Gradle: error: illegal start of expressionError:(103, 15) Gradle: error: illegal start of expressionError:(103, 26) Gradle: error: ';' expectedError:(103, 43) Gradle: error: ';' expected
删除注释以进行注销,效果很好。