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");
}
-------------->