![]() |
problema al mostrar errores Hola a todos. Tengo una aplicación basada en Struts y me surgen problemas a la hora de mostrar los errores en la propia página. Por ejemplo, cuando quiero dar de alta un cliente y faltan alguno de los datos, como el nombre o los apellidos. Lo tengo hecho así: Tengo la clase de negocio del cliente, en la que hay una funciona 'validarCliente' a la que se le pasa un objeto Cliente, que será el que posteriormente se le pasará a otra clase de acceso a datos para que cree el nuevo cliente en la base de datos. private void validarCliente(Cliente cliente) throws ClienteException { if(cliente.getNif().trim().equals("")) { throw new ClienteException("error.missing.nif"); } if(cliente.getNombre().trim().equals("")) { throw new ClienteException("error.missing.nombre"); } if(cliente.getApellido1().trim().equals("")) { throw new ClienteException("error.missing.apellido1"); } if(cliente.getApellido2().trim().equals("")) { throw new ClienteException("error.missing.apellido2"); } } Tengo definida la excepcion ClienteException a la que se le pasa el correspondiente mensaje de error de la siguiente manera: package concesionario.negocio; public class ClienteException extends Exception { public ClienteException(String message) { super(message); } } Tengo también un archivo de recursos de la aplicación (ConcesionarioResources.Properties) en el que defino un mensaje asociado a cada error: error.create.cliente= <font color="red"> No se puede crear el cliente </font> error.removed.cliente= <font color="red"> El cliente seleccionado se ha eliminado </font> error.duplicate.cliente= <font color="red"> El cliente especificado ya existe </font> error.missing.nif= <font color="red"> Introduzca el NIF </font> error.missing.nombre= <font color="red"> Introduzca el nombre </font> error.missing.apellido1= <font color="red"> Introduzca el primer apellido </font> error.missing.apellido2= <font color="red"> Introduzca el segundo apellido </font> Y este archivo esta definido en el web.xml como parámetro de inicio del servlete de acción: <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>application</param-name> <param-value>ConcesionarioResources</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> Pues bien, después de todo esto, si por ejemplo dejo sin introducir alguno de los datos del cliente, no me aparece el error correspondiente en la página, simplemente me aparecen dos 'null'. Le he dado mil vueltas y no se que puede estar mal o si se puede hacer mejor de otra forma. Añadir por si sirve de ayuda que la funcion de la clase de negocio para registrar el cliente es: public void registrarCliente(Cliente cliente) throws ClienteException { validarCliente(cliente); Connection con = null; try { con = pool.getConnection(); ClienteDAO clienteDAO = new ClienteDAO(con); clienteDAO.crear(cliente); con.commit(); /* Se realiza la transaccion */ } catch(Exception e) { try { if(con != null) { con.rollback(); throw new ClienteException(e.getMessage()); } } catch(SQLException sqle) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } } finally { try { if(con != null) { con.close(); } } catch(SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } } } Y que el código de la clase de acción es: package concesionario.actions; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.Action; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import java.util.Collection; import concesionario.negocio.ClienteBO; import concesionario.entidades.Cliente; public class RegistrarClienteAction extends Action { public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ActionErrors errors = new ActionErrors(); try { ClienteBO clienteBO = new ClienteBO(); clienteBO.registrarCliente((Cliente)form); return mapping.findForward("success"); } catch (Throwable e) { e.printStackTrace(); ActionError error = new ActionError(e.getMessage()); errors.add(ActionErrors.GLOBAL_ERROR, error); } saveErrors(request, errors); return new ActionForward(mapping.getInput()); } } |
Re: problema al mostrar errores Código: if(cliente.getNif().trim().equals(""))S! PD: * Esta y todas las lineas parecidas |
Re: problema al mostrar errores pues no parece que sea ese el problema, en la ventana de tomcat si que me aparace el error.missing.* y no veo por ningun lado ningún NPE. También he probado a poner "".equals(cliente.getNif().trim()) pero ocurre lo mismo. |
Re: problema al mostrar errores si pones Código: cliente.getNif().trim())Si necesitas hacer el trim(), prueba con Código: cliente.getNif()!=null && "".equals(cliente.getNif().trim())S! |
Re: problema al mostrar errores no se si el problema puede estar en el archivo de recursos ConcesionarioResources.properties, he intentado comprobar errores antes de hacer ningun acceso a la base de datos con ActionError y ActionErrors pero me sigue apareciendo el doble null, o ya no se si pensar como tu dices GreenEyed porque ya no se que otra cosa puede ser. He hecho: ActionErrors errors = new ActionErrors(); Cliente cliente = new Cliente(); cliente = (Cliente)form; String nif = cliente.getNif(); if(nif.trim().equals("")) { ActionError error = new ActionError("error.missing.nif"); errors.add(ActionErrors.GLOBAL_ERROR, error); } if(errors.size() >0) { saveErrors(request, errors); return new ActionForward(mapping.getInput()); } |
Re: problema al mostrar errores Cita:
Lo voy a probar, es que justo estaba escribiendo otro post cuando me has mandado este. Luego te cuento. |
Re: problema al mostrar errores Sigue igual, ya me estoy empezando a desesperar, parece que todo lo hace bien, detecta que falta el campo que sea pero luego no me imprime el error. Gracias por las sugerencias de todos modos. |
Re: problema al mostrar errores pongo la traza de errores de tomcat por si sirve de algo (espero que se pueda acceder a la imagen), en este caso es para vehiculo y marca pero es todo igual que para cliente y nif http://img267.imageshack.us/img267/6098/dibujokt1.jpg |
Re: problema al mostrar errores ¿Que pone en la linea 169 de VehiculoBO.java? |
Re: problema al mostrar errores if(vehiculo.getMarca()!=null && "".equals(vehiculo.getMarca().trim())) { ---------> throw new VehiculoException("error.missing.marca"); } |
Re: problema al mostrar errores Entonces, hace lo que toca, inicialmente, ya que detecta que le falta la marca y ya no da NullPointerException. ¿Que es lo que crees que deberia hacer despues? Si es que no redirecciona el error el Struts, ahi no te puedo ayudar mucho por que no use el Struts :-). S! |
Re: problema al mostrar errores se supone que una vez creada la excepcion de que falta la marca en la clase de accion recogería ese errror y lo añadiría al ActionErrors errors como pone a continuación: catch (Throwable e) { ActionErrors errors = new ActionErrors(); e.printStackTrace(); ActionError error = new ActionError(e.getMessage()); errors.add(ActionErrors.GLOBAL_ERROR, error); } saveErrors(request, errors); return new ActionForward(mapping.getInput()); |
Re: problema al mostrar errores he puesto en el archivo de recuros (ConcesionarioResources.properties) esto error.missing.marca=<li><font color="red">Por favor, introduce la marca</font></li> lo he visto en un ejemplo de un libro (aunque no se que significan los <li>, lo miraré) y sale bien el error de que falta la marca, aunque aparece entre los dos null de antes, esos si que no se de donde provienen |
Re: problema al mostrar errores ya se que es ese <li> eso no tiene que ver. en ConcesionarioResource.properties tenia error.missing.nif= <font color="red"> Introduzca el NIF </font> si pongo error.missing.nif=<font color="red"> Introduzca el NIF </font> Sale el error asi: null Introduzca el NIF null Ya intentaré averiguar de donde salen esos null Perdón por tanta molestia y gracias de nuevo por tu ayuda GreenEyed, espero yo también poder ayudar a los demás cuando vaya cogiendo más experiencia. Un saludo. |
Re: problema al mostrar errores Ummmm Si lo hicieras asi no funcionaria, ya que cuando haces " saveErrors(request, errors);" la variable errors a la que les ha añadido el error esta fuera de ambito (esta declarada dentro del catch), no creo que sea eso por que si no te daria error de compilacion. Pero prueba a poner algunos system err en antes del saveErrors a ver si el error esta añadido etc. Lo que hace de hacer despues, ya... es cosa de Struts. |
| La zona horaria es GMT -6. Ahora son las 08:20. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.