Foros del Web » Programación para mayores de 30 ;) » Java »

Error en LoginAction

Estas en el tema de Error en LoginAction en el foro de Java en Foros del Web. Hola a todos, soy nuevo en programacion y en la facultad nos dieron un proyecto final, consiste en validar datos de usuario y hacer otras ...
  #1 (permalink)  
Antiguo 04/11/2010, 18:31
 
Fecha de Ingreso: marzo-2009
Mensajes: 31
Antigüedad: 15 años, 1 mes
Puntos: 0
Pregunta Error en LoginAction

Hola a todos, soy nuevo en programacion y en la facultad nos dieron un proyecto final, consiste en validar datos de usuario y hacer otras cosas. ahora tengo un error al momento de hacer la validacion, nose como obtener los datos desde el login.jsp
Código:
<html:errors/>
        <html:form action="/login">
            <table border="0" align="center">
                <tr>
                    <td>Usuario:</td>
                    <td><html:text property="userId" /></td>
                </tr>
                <tr>
                    <td>Clave:</td>
                    <td><html:password property="password" /></td>
                </tr>
            </table>
            <P align="center">
                <html:submit/>
            </P>
            <P>&nbsp;</P>
        </html:form>
Código:
 public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        boolean validar = true;
        if (getUserId() == null || getUserId().length() < 1) {
            errors.add("userId", new ActionMessage("error.userid.required"));
            validar = false;
        }
         if (getPassword() == null || getPassword().length() < 1) {
            errors.add("userId", new ActionMessage("error.password.required"));
            validar = false;
        }

        Usuario unUsuario = new Usuario();
        UsuarioDAO userDAO = new UsuarioDAOimp();
        unUsuario = userDAO.getNombre(getUserId());

        if (validar) {
            if((!this.getUserId().equals(unUsuario.getUserNombreComp())) ||(!this.getPassword().equals(unUsuario.getUserClave()))){
                errors.add("accesoError", new ActionMessage("error.userid.notesist"));
            }
        }
        return errors;
    }
al ejecutar me sale este error

Código:
04/11/2010 21:22:09 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() para servlet action lanzó excepción
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at java.util.ArrayList.RangeCheck(ArrayList.java:547)
        at java.util.ArrayList.get(ArrayList.java:322)
        at com.ar.unju.tpfinal.modelo.daoimp.UsuarioDAOimp.getNombre(UsuarioDAOimp.java:70)
        at com.myapp.struts.forms.LoginForm.validate(LoginForm.java:84)
        at org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:945)
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:198)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
        at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:662)
Espero me puedan ayudar.
  #2 (permalink)  
Antiguo 05/11/2010, 02:44
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Error en LoginAction

Cita:
com.ar.unju.tpfinal.modelo.daoimp.UsuarioDAOimp.ge tNombre(UsuarioDAOimp.java:70)
Esto parece indicar que el problema no lo tienes en el action, sino en UsuarioDAOimp.getNombre()

Revisa que el array/collection del que lee getNombre esté bien construido o que no estés leyendo posiciones inexistentes.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 05/11/2010, 06:08
 
Fecha de Ingreso: marzo-2009
Mensajes: 31
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Error en LoginAction

Es que lo que hace el getNombre es buscar en la base de datos el nombre del usuario apartir de un string, en este caso el getUserId que viene de el html:text property="userId" />
y ese es el unico problema. lo que hace el getNombre es lo siguiente:

Código:
public Usuario getUsuario(Integer idUsuario) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        Criteria criteria = session.createCriteria(Usuario.class);
        criteria.add(Restrictions.eq("idUsuario",idUsuario));
        Usuario usr = (Usuario)criteria.list().get(0);
        session.close();
        return usr;
    }

    public Usuario getNombre(String nombre) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        Criteria criteria = session.createCriteria(Usuario.class);
        criteria.add(Restrictions.eq("userNombreComp",nombre));
        Usuario usr = (Usuario)criteria.list().get(0);
        session.close();
        return usr;
    }
  #4 (permalink)  
Antiguo 05/11/2010, 06:27
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Error en LoginAction

El mensaje de error es claro

Cita:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
Creo que el problema está aquí (comprueba si es la línea 70 de tu código)

Cita:
Usuario usr = (Usuario)criteria.list().get(0);
por lo que parece criteria.list() no tiene ningún valor, porque
Cita:
criteria.add(Restrictions.eq("userNombreComp",nomb re));
no añade ningún valor.

Para comprobarlo utiliza el debugger o mete esas líneas dentro de un try/catch haciendo que muestre un mensaje con el valor de la variable "nombre", así sabrás si estás recuperando correctamente esa variable de la JSP.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 05/11/2010, 06:30
 
Fecha de Ingreso: marzo-2009
Mensajes: 31
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Error en LoginAction

solucionado el error, gente intente algo que pense que seria inutil pero resolvio el problema, solo era cambiar el lugar en donde hago la consulta a la base de datos.

Antes
Código:
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        boolean validar = true;
        if (getUserId() == null || getUserId().length() < 1) {
            errors.add("userId", new ActionMessage("error.userid.required"));
            validar = false;
        }
         if (getPassword() == null || getPassword().length() < 1) {
            errors.add("userId", new ActionMessage("error.password.required"));
            validar = false;
        }

        Usuario unUsuario = new Usuario();
        UsuarioDAO userDAO = new UsuarioDAOimp();
        unUsuario = userDAO.getNombre(getUserId());

        if (validar) {
            if((!this.getUserId().equals(unUsuario.getUserNombreComp())) ||(!this.getPassword().equals(unUsuario.getUserClave()))){
                errors.add("accesoError", new ActionMessage("error.userid.notesist"));
            }
        }
        return errors;
    }
Ahora
Código:
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        boolean validar = true;
        if (getUserId() == null || getUserId().length() < 1) {
            errors.add("userId", new ActionMessage("error.userid.required"));
            validar = false;
        }
         if (getPassword() == null || getPassword().length() < 1) {
            errors.add("userId", new ActionMessage("error.password.required"));
            validar = false;
        }        
        

        if (validar) {
            UsuarioDAO unserDAO = new UsuarioDAOimp();
            Usuario unUsuario = unserDAO.getNombre(getUserId());
            System.out.println("NOMBRE DE USUARIO: "+ unUsuario.getUserNombreComp());
            if((!this.getUserId().equals(unUsuario.getUserNombreComp())) ||(!this.getPassword().equals(unUsuario.getUserClave()))){
                errors.add("accesoError", new ActionMessage("error.userid.notexist"));
            }
        }
        return errors;
    }
Por el momento anda a la perfeccion e consultado 2 usuarios y regresa bien los datos.
  #6 (permalink)  
Antiguo 05/11/2010, 06:37
 
Fecha de Ingreso: marzo-2009
Mensajes: 31
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Error en LoginAction

Una consulta, ahora anda bien , pero al testear ingresando datos erroneos en nombre de usuario y contraseña, por un instante hace bien , pero pasado un rato de colocar datos erroneos genera el mismo error anterior. que puede ser?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:24.