Ver Mensaje Individual
  #5 (permalink)  
Antiguo 06/05/2009, 10:50
jesuscoro
 
Fecha de Ingreso: noviembre-2008
Mensajes: 115
Antigüedad: 16 años, 2 meses
Puntos: 4
Respuesta: Formularios en Struts con datos previos

Voy a poner todo lo que tengo a ver si alguien encuentra el error. Tambien agradezco mejoras, que de struts no tengo mucha idea y estoy aprendiendo sobre la marcha

struts-config.xml
Código:
<form-beans>
       <form-bean type="com.ejemplosjava.biblioteca.web.form.UsuarioForm" name="usuarioForm" />
</form-beans>
.
.
.
.
        <action path="/usuarioAction" type="com.ejemplosjava.biblioteca.web.action.UsuarioCRUDAction" parameter="method">
           <forward name="list"     path="usuarios.list" />
           <forward name="retrieve" path="usuarios.detalle" />
           <forward name="create"   path="usuarios.crear" />
           <forward name="edit"     path="usuarios.actualizar" />
        </action>

        <action path="/insertUsuarioAction" type="com.ejemplosjava.biblioteca.web.action.UsuarioCRUDAction" parameter="method"
            name="usuarioForm" validate="true" input="usuarios.crear">
            <forward name="insert"   path="/action/usuarioAction?method=retrieve" />
        </action>
        <action path="/updateUsuarioAction" type="com.ejemplosjava.biblioteca.web.action.UsuarioCRUDAction" parameter="method"
            name="usuarioForm" validate="true" input="usuarios.actualizar">
            <forward name="update"   path="/action/usuarioAction?method=retrieve" />
        </action>
        <action path="/deleteUsuarioAction" type="com.ejemplosjava.biblioteca.web.action.UsuarioCRUDAction" parameter="method">
            <forward name="delete"   path="/action/usuarioAction?method=list" />
        </action>
UsuarioCRUDAction es un dispatchAction que tiene los metodos:

list .- Extrae la lista los usuarios de la base de datos y la pone en la request
create.- Pone en la sesion la lista de roles y redirige a usuarios.crear (donde esta el formulario que me da problemas)
insert.- Inserta en la base de datos y redirige a usuarios.detalle
edit.- Pone en la request el detalle de un usuario para editarlo
update.- Actualiza el usuario en la base de datos
delete.- Borra el usuario de la base de datos
retrieve.- Muestra el detalle de un usuario

Pongo el codigo de los metodos list, create, insert y retrieve, que es por donde se pasa para hacer todo el proceso

Código:
    public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String metodo = "create(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)";
        loggerCRUDAction.info("Entrando en UsuarioCRUDAction." + metodo);

        try {
            request.getSession().setAttribute(RequestKeys.LISTA_ROLES, rolDelegate.getListaRoles()); //Extraemos la lista de roles
        } catch (Exception ex) {
            String mensajeError = "Se ha producido un error en " + this.getClass().getName() + "." + metodo + "Causa: " + ex.getMessage();
            Methods.sendErrorMail(metodo, this.getClass().getName(), mensajeError);
            request.setAttribute(RequestKeys.ERROR, ex.getMessage());
            loggerCRUDAction.error(mensajeError);
            return mapping.findForward("error");
        }
        loggerCRUDAction.info("Se completo con exito " + this.getClass().getName() + "." + metodo);

    public ActionForward insert(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String metodo = "insert(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)";
        loggerCRUDAction.info("Entrando en UsuarioCRUDAction." + metodo);

        UsuarioForm usuarioFormulario = (UsuarioForm) form;
        UsuarioVO usuarioVO = new UsuarioVO();
        usuarioFormulario.populate(usuarioVO);  //Rellenamos un usuario con los datos del formulario

        ImagenVO imagenVO = new ImagenVO(); //Creamos una nueva imagen
        imagenVO.setIdTabla(TablasKeys.TABLA_USUARIO);  //Le asignamos el idTabla
        FormFile formFile = null;
        
        formFile = usuarioFormulario.getImagenUsuario();

        if(!formFile.getFileName().equals("")){    //Si el usuario selecciono una imagen, usamos esa
            imagenVO.setImagen(formFile.getFileData());
            usuarioVO.setRutaFotoUsuario("../../images/usuarios/" + formFile.getFileName());
        }else{                   //Si no, usamos la imagen por defecto
            loggerCRUDAction.warn("Habria que cambiar esto para que funcione igual que en el update");
            Map parametros = new HashMap();
            parametros.put("idTabla", TablasKeys.TABLA_USUARIO);
            parametros.put("idRegistro", 0);
            imagenVO.setImagen(imagenDelegate.getDetalleImagen(parametros).getImagen());
            usuarioVO.setRutaFotoUsuario(Constantes.IMAGEN_DEFECTO_USUARIO);
        }
        try {
            usuarioDelegate.insertUsuario(usuarioVO, imagenVO); //Tratamos de insertar el usuario y la imagen en la base de datos
        } catch (Exception ex) {
            String mensajeError = "Se ha producido un error en " + this.getClass().getName() + "." + metodo + "Causa: " + ex.getMessage();
            Methods.sendErrorMail(metodo, this.getClass().getName(), mensajeError);
            request.setAttribute(RequestKeys.ERROR, ex.getMessage());
            loggerCRUDAction.error(mensajeError);
            return mapping.findForward("error");
        }

        loggerCRUDAction.info("Se completo con exito " + this.getClass().getName() + "." + metodo);
        request.setAttribute(RequestKeys.ID_USUARIO, usuarioVO.getIdUsuario());

        request.getSession().removeAttribute(RequestKeys.LISTA_ROLES);

        return mapping.findForward("insert");
    }
        return mapping.findForward("create");
    }

    public ActionForward retrieve(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String metodo = "retrieve(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)";
        loggerCRUDAction.info("Entrando en UsuarioCRUDAction." + metodo);

        String _idUsuario = request.getParameter(RequestKeys.ID_USUARIO); //Intentamos recuperar el id como un parametro
        Integer idUsuario = null;
        if (_idUsuario == null) {       //Si no existe, es por que venimos de un update o insert, y estara como atributo
            idUsuario = (Integer) request.getAttribute(RequestKeys.ID_USUARIO);
        } else {
            idUsuario = new Integer(_idUsuario);
        }

        UsuarioVO usuario = null;
        try{
            usuario = usuarioDelegate.getDetalleUsuario(idUsuario); //Extraemos el detalle del usuario de la base de datos
        }catch(Exception ex){
            String mensajeError = "Se ha producido un error en " + this.getClass().getName() + "." + metodo + "Causa: " + ex.getMessage();
            Methods.sendErrorMail(metodo, this.getClass().getName(), mensajeError);
            request.setAttribute(RequestKeys.ERROR, ex.getMessage());
            loggerCRUDAction.error(mensajeError);
            return mapping.findForward("error");
        }
        request.setAttribute(RequestKeys.DETALLE_USUARIO, usuario); //Depositamos el usuario en la peticion

        if (usuario!=null) { //Si existe el usuario, comprobamos si existe la imagen
            String imagenPath = usuario.getRutaFotoUsuario(); //Agregamos el nombre de la imagen a una clave generica para
            String imagenPathConvertida = "";                 //todas las tablas
            imagenPathConvertida = Constantes.PATH_IMAGES + imagenPath.substring(5);
            File imagen = new File(imagenPathConvertida);
            if (!imagen.exists()) { //Si no existe la imagen en el sistema de fichero, la extraemos de la base de datos
                Map parametros = new HashMap();
                parametros.put(Constantes.ID_REGISTRO, idUsuario);
                parametros.put(Constantes.ID_TABLA, TablasKeys.TABLA_USUARIO);
                try {
                    loggerCRUDAction.info("No existe la imagen. Se extraerá de la base de datos");
                    ImagenVO imagenVO = imagenDelegate.getDetalleImagen(parametros);
                    Methods.changeImagenToFileFromBlob(imagenVO.getImagen(), imagenPathConvertida);
                    log.info("Concluida la extraccion de la imagen");
                } catch (Exception ex) {    //Como no es un error grave, dejamos un aviso en el log, pero continua la carga normal
                                            //de la pagina
                    loggerCRUDAction.error("Error extrayendo la imagen en UsuarioCRUDAction.retrieve(). Causa: " + ex.getMessage());
                }
            }
        }else{  //El que no exista el usuario es un error grave, asi que se devuelve un error
            String mensajeError = "Se ha producido un error en " + this.getClass().getName() + "." + metodo + "Causa: " + "No existe el usuario";
            Methods.sendErrorMail(metodo, this.getClass().getName(), mensajeError);
            request.setAttribute(RequestKeys.ERROR, "No existe el usuario");
            loggerCRUDAction.error(mensajeError);
            return mapping.findForward("error");            
        }

        loggerCRUDAction.info("Se completo con exito " + this.getClass().getName() + "." + metodo);
        return mapping.findForward("retrieve");
    }
-------------->