编辑和删除在使用Primefaces的CRUD中不起作用

时间:2016-02-25 05:46:50

标签: hibernate

我有一个汇总CRUD的表,但它只能插入记录,但不能编辑和删除它们。

我一直在多次审查代码,但无法找到解释,因为在这些情况下,失败可能是愚蠢的,但我很沮丧并被要求帮助你。

该表称为“位置”,具有以下结构: enter image description here

它的特点是名为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

1 个答案:

答案 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

删除注释以进行注销,效果很好。