lunes, 16 de julio de 2007

Imprimiendo mensajes de error para relacionar con html:errors

Problema: Queremos imprimir mensajes de error para que sean tomados por la etiqueta

Soluciones: Dependiendo de la versión de struts que usemos valdrán unas u otras.

Solución con ActionMessages: Hago un método que redirigirá y con el código del almacenamiento del mensaje dentro. Puede variar el método, pero el registro del error es casi idéntico siempre.

protected ActionForward findSuccess(ActionMapping mapping, ActionForm arg1, HttpServletRequest request, HttpServletResponse arg3) {


if (this.getActionParameter(ExceptionCortasKeys.PARAM_ID_NO_SELECCIONADO)!=null){
String mensaje = new String("Mensaje de error a mostrar");
// registramos el error
ActionMessages errores = getErrors(request, true);
errores.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("idErrorGlobal", mensaje));
saveErrors(request, errores);
//redirijo a la página de input del mapeo de struts
return mapping.getInputForward();
}

return super.findSuccess(mapping, arg1, request, arg3);
}


Solución con ActionErrors:
Explicación idéntica que lo anterior, varía el tipo de mensajes, es decir, el registro del error, quedando así:

ActionErrors errors = getErrors(request, true);
errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("global.princastexception", exception.getMessage()));
saveErrors(request, errors);

Mostrando pdf usando struts.

Problema: Queremos poner un enlace para que se llame un action y se muestre un pdf (típica ventana para abrir o descargar). El pdf nos viene en un array de bytes.

Solución: Desde la propia action que es llamada desde el enlace, colocaríamos el siguiente código:



try{
//obtengo el array de bytes del pdf
byte[] respuestaByte= this.miDelegate.getPDF();

//digo que es un pdf
response.setContentType("application/pdf");

//asigno el nombre del pdf, para cuando el usuario lo abra o descargue
response.setHeader("Content-Disposition",("attachment;filename=\"" +
nombrePDF+ ".pdf\""));

int longitud = respuestaByte.length;

//especifico el tamaño
response.setContentLength(longitud);

/*volcando a fichero*/
ServletOutputStream ouputStream = response.getOutputStream();

ouputStream.write(respuestaByte);

ouputStream.flush();

ouputStream.close();

}
catch(Exception e){
logger.error("No se ha podido regenerar correctamente el pdf");
}

miércoles, 4 de julio de 2007

Órdenes varias para oc4j

Imaginemos un contenedor llamado OC4J_MICONT
.-Comprobar el estado de la instancia OC4J_MICONT:
opmnctl status

.-Levantar la instancia OC4J_MICONT
dcmctl start -co OC4J_MICONT
opmnctl startproc process-type=OC4J_MICONT
opmnctl stopproc process-type=OC4J_MICONT

OJOOOOOOOOO.....ES MEJOR USAR LO SIGUIENTE:
opmnctl stopproc process-type=OC4J_MICONT
opmnctl startproc process-type=OC4J_MICONT

.-Reiniciar la instancia
dcmctl restart -co OC4J_MICONT

.-DEPLOY
dcmctl deployapplication -f nombreEar.ear -a miAplicacion -co OC4J_MICONT

.-UNDEPLOY
dcmctl undeployapplication -a miAplicacion -co OC4J_MICONT
Nota: A veces puede no funcionar bien el undeploy, con lo cual, puede que al listar las aplicaciones no aparezca, pero en realidad, si vamos al directorio del contenedor y vemos dentro del directorio applications o del applications-deployments puede estar; en ese caso, borrar los ears y carpetas relacionados.

.-LISTA DE APPLICATIONS
dcmctl listapplications -co OC4J_MICONT