Bueno, estoy configurando una aplicación web sencilla con Hibernate + Spring 3 + Struts 2 (siguendo un tutorial) para más adelante crear una mía propia. El problema es que al ejecutarlo todo, obtengo el siguiente error (El error creo que se encuentra en la capa de Struts).
Código:
Struts Problem Report Struts has detected an unhandled exception: Messages: File: escuela/web/AlumnoAction.java Line number: 38 Stacktraces java.lang.NullPointerException escuela.web.AlumnoAction.lista(AlumnoAction.java:38) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243) com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) .... ....
Básicamente lo que quiero es sacar un listado de los alumnos de la base de datos, no quiero más (por ahora jeje). Estas son mis clases y mis archivos de configuración.
Clases JAVA
Alumno
AlumnoDao (Es una Interfaz)
AlumnoDaoHibernate
AlumnoAction
Código:
El archvio struts.xml es el siguiente:package escuela.web; import escuela.dao.AlumnoDao; import escuela.model.Alumno; import com.opensymphony.xwork2.ActionSupport; import java.util.List; import javax.annotation.Resource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; @Controller("alumnoAction") @Scope("prototype") public class AlumnoAction extends ActionSupport { private static final Log log = LogFactory.getLog(AlumnoAction.class); @Resource(name="alumnoDaoHibernate") private AlumnoDao alumnoDao; private List<Alumno> alumnos; private Long id; private Alumno alumno; public String lista() { log.debug("Lista de alumnos desde struts"); alumnos = alumnoDao.lista(); return SUCCESS; } public String edita() { log.debug("Editando alumno con struts"); alumno = alumnoDao.obtiene(id); return SUCCESS; } public String guarda() { alumnoDao.guarda(alumno); return SUCCESS; } public List<Alumno> getAlumnos() { return alumnos; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Alumno getAlumno() { return alumno; } public void setAlumno(Alumno alumno) { this.alumno = alumno; } }
Código:
Y el jsp es:<?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> <package name="default" namespace="/" extends="struts-default"> </package> <package name="alumno" namespace="/jsp/alumno" extends="struts-default"> <action name="lista" class="escuela.web.AlumnoAction" method="lista"> <result>/SpringHibernateStruts2/jsp/alumno/lista.jsp</result> </action> <action name="edita" class="escuela.web.AlumnoAction" method="edita"> <result>/SpringHibernateStruts2/jsp/alumno/lista.jsp</result> </action> </package> </struts>
lista.jsp
Código:
<%-- Document : lista Created on : Jan 18, 2010, 11:07:39 AM Author : jdmr --%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <%--<%@taglib prefix="c" uri="http://java.sun.com/jstl/core"%>--%> <%@taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Lista de Alumnos</title> </head> <body> <h1>Lista de Alumnos</h1> <table> <thead> <tr> <th>Matricula</th> <th>Apellido</th> <th>Nombre</th> <th>Correo</th> </tr> </thead> <tbody> <s:iterator value="alumnos" status="status"> <s:url var="editaAlumno" action="editaAlumno"> <s:param name="id" value="%{id}"/> </s:url> <tr class="<s:if test='#status.odd == true'>even</s:if><s:else>odd</s:else>"> <td><s:a href="%{editaAlumno}"><s:property value="matricula"/></s:a></td> <td><s:property value="nombre"/></td> <td><s:property value="apellido"/></td> <td><s:property value="correo"/></td> </tr> </s:iterator> </tbody> </table> </body> </html>
Estoy ya un poco quemado porque ya veo errores donde creo que no los hay... llevo mas de una semana intentando arrancar el ejemplo y nada. Ya no se si es porque no estoy conectado a la Base de Datos, si he programado algo mal... por favor a ver si alguno me puede echar una mano porque me sería de gran ayuda.