Entonces hay una parte de la aplicación donde aparece el listado con las categorías, el usuario elige una categoría y le aparece el listado con los productos asociados a esa categoría.
Pues bien hago una consulta para que me devuelva un listado con los productos asociados a una categoria, desde HibernateManager compruebo con debug que efectivamente me devuelve ese listado, pero cuando estoy en la clase Action de Producto donde hago referencia a esa consulta pues ahí en el listado me devuelve un null, no entiendo muy bien porqué sucede.
Voy a poner el código:
listarCategorias.jsp
Código JSP:
Ver original
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>Categorias</title> </head> <body> <s:actionerror/> <s:form action="seleccionarProductos" method="post"> <s:select label="Categoria" list="categoriaList" name="nombreCategoria"/> <s:submit value="Ver Productos" align="center"/> </s:form> <s:iterator value="productoList" var="producto"> <tr> <td><s:property value="nombre"/></td> </tr> </s:iterator> </body> </html>
struts.xml
Código XML:
Ver original
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="false" /> <package name="default" extends="struts-default" namespace="/"> <action name="seleccionarProductos" class="web.ProductoAction" method="seleccionarProductos"> <result name="success" type="chain">listarCategorias</result> <result name="input" type="chain">index</result> <result name="error" type="chain">listarCategorias</result> </action> <action name="index" class="web.CategoriaAction"> <result name="success">/index.jsp</result> </action> <action name="listarCategorias" class="web.CategoriaAction"> <result name="success">/listarCategorias.jsp</result> </action> </package> </struts>
ProductoAction.java
Código JAVA:
Ver original
package web; import java.util.List; import com.opensymphony.xwork2.ActionSupport; import database.entity.Categoria; import database.entity.Producto; import database.manager.CategoriaManager; import database.manager.ProductoManager; public class ProductoAction extends ActionSupport { private static final long serialVersionUID = 9149826260758390091L; private Producto producto; private List<Producto> productoList; private List<Categoria> categoriaList; private CategoriaManager categoriaController; private ProductoManager productoManager; public ProductoAction() { productoManager = new ProductoManager(); categoriaController = new CategoriaManager(); } Categoria c = (Categoria) categoriaController.getElementByNombre(nombreCategoria); this.productoList = productoManager.getListadoPiezasDeCategorias(c.getId()); return SUCCESS; } this.categoriaList = categoriaController.getList(); return SUCCESS; } try { Categoria c = (Categoria) categoriaController.getElementByNombre(nombreCategoria); this.producto.setCategoria(c); productoManager.create(getProducto()); e.printStackTrace(); } this.productoList = productoManager.getList(); return SUCCESS; } productoManager.delete(getId()); return SUCCESS; } public Producto getProducto() { return producto; } public List<Producto> getProductoList() { return productoList; } public void setProducto(Producto producto) { this.producto = producto; } public void setProductoList(List<Producto> productosList) { this.productoList = productosList; } return id; } this.id = id; } return nombreCategoria; } this.nombreCategoria = nombreCategoria; } public List<Categoria> getCategoriaList() { return categoriaList; } public void setCategoriaList(List<Categoria> categoriaList) { this.categoriaList = categoriaList; } }
HibernateManager.java
Código JAVA:
Ver original
package database.common; import java.util.ArrayList; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; public abstract class HibernateManager { // obtener la sesion actual Session session = getSession(); try { // comenzar la transaccion session.beginTransaction(); // cargar objeto por clave obj = session.createCriteria(myClass.getClass()) .add(Restrictions.eq("nombre", nombre)).uniqueResult(); // confirmar transaccion session.getTransaction().commit(); // deshacer transaccion this.rollback(); } return obj; } /** * Obtener la lista de registros para una entidad * @return */ // obtener la sesion actual Session session = getSession(); try { // comenzar la transaccion session.beginTransaction(); // obtener la lista de eventos result = session.createCriteria(myClass.getClass()).list(); // confirmar transaccion session.getTransaction().commit(); // deshacer transaccion this.rollback(); } return result; } /** * Comprobar si esta repetido un objeto a partir de un valor de un atributo * @param attr * @param value * @return */ // obtener la sesion actual Session session = getSession(); try { // comenzar la transaccion session.beginTransaction(); // cargar objeto por clave obj = session.createCriteria(myClass.getClass()).add(Restrictions.eq(attr, value)).uniqueResult(); // confirmar transaccion session.getTransaction().commit(); // deshacer transaccion this.rollback(); } return obj != null ? true : false; } Session session = getSession(); try { session.beginTransaction(); Query query = session.createSQLQuery("select * from Producto where categoria_id=:cat_id"); query.setParameter("cat_id", cat_id); result = query.list(); session.getTransaction().commit(); this.rollback(); } return result; } /** * Obtener la sesion de hibernate para el acceso a la base de datos * @return */ protected Session getSession(){ Session session = null; try { session = HibernateUtil.getSessionFactory().getCurrentSession(); if(!session.isOpen()){ session = HibernateUtil.getSessionFactory().openSession(); } session = HibernateUtil.getSessionFactory().openSession(); } return session; } /** * Obtener el nombre de la tabla al que hace referencia * @return */ return TABLE; } /** * Hacer rollback y que no se termine la aplicacion tras un fallo */ public void rollback(){ Session session = getSession(); try { // deshacer transaccion session.getTransaction().rollback(); } } }