Que tal a todos, en una aplicación que estoy desarrollando en Struts2-Hibernate estoy teniendo problemas. Ahora mismo tengo 2 objetos, que son: Categoría y Producto. Una Categoría está compuesta por 1 o más Productos.
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 originalpackage 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 String nombreCategoria
; private List<Categoria> categoriaList;
private CategoriaManager categoriaController;
private ProductoManager productoManager;
public ProductoAction() {
productoManager = new ProductoManager();
categoriaController = new CategoriaManager();
}
public String seleccionarProductos
() { Categoria c = (Categoria) categoriaController.getElementByNombre(nombreCategoria);
this.productoList = productoManager.getListadoPiezasDeCategorias(c.getId());
return SUCCESS;
}
this.categoriaList = categoriaController.getList();
System.
out.
println("execute called"); return SUCCESS;
}
System.
out.
println(getProducto
()); 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;
}
public void setId
(Long id
) { this.id = id;
}
public String getNombreCategoria
() { return nombreCategoria;
}
public void setNombreCategoria
(String 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 originalpackage 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 {
protected String TABLE
= ""; // nombre de la tabla
// 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();
System.
out.
println("Error en getElementById: " + e
); // 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();
System.
out.
println("Error en getList: " + e
); // 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();
System.
out.
println("Error en checkRepeated: " + e
); // deshacer transaccion
this.rollback();
}
return obj != null ? true : false;
}
public List getListadoPiezasDeCategorias
(Integer cat_id
){
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();
System.
out.
println("Error en getElementById: " + e
); 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();
System.
out.
println("Error en rollback: " + e
); }
}
}