Mostrando entradas con la etiqueta action. Mostrar todas las entradas
Mostrando entradas con la etiqueta action. Mostrar todas las entradas

lunes, 25 de febrero de 2013

Hacer un redirect con struts

Problema: He creado un post, y el forward me llevó al listado de post, sin embargo, como la url es /crearActionPost.do  , si le doy a refrescar me volverá a crear el mismo post.  Quiero que me cambie la url, para que aunque refresquen, sea imposible volver a crear el mismo post, que para crear un post, deban iniciar el proceso.

Solución:

   Esto sería lo que tendría habitualmente:  //return mapping.findForward("mostrarTodo");
 Esta, una primera aproximación: 
    // ActionForward ac = mapping.findForward("mostrarTodo");
    // ac.setRedirect(true);
    //return ac;
   En realidad ActionForward, hereda de ForwardConfig, entonces, puedo decirle, que quiero que 
vaya al listado pero indicándole que haga un redirect:       
    ForwardConfig f = new ActionRedirect(mapping.findForward("mostrarTodo"));
    f.setRedirect(true);
    return (ActionForward) f;

lunes, 16 de julio de 2007

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

lunes, 12 de marzo de 2007

'SetParameter' para la request

Me he topado con la necesidad de pasar por request un parameter, pero sólo tengo lo de "setAttribute" desde un Action.

Solución:
1.-Yo uso DispatchAction, pues en algún método que retorne ActionForward y que sea el que usen de base (en mi caso findSuccess), hacen lo siguiente:
  
//obtengo el path actual de la request
String uri = ServletPathUtils.getCompleteURL( request );
//llamo a la función que me da la nueva url a la que quiero ir
String url=miRequestNueva(uri);
//retorno el action forward con el redirect a true para que me redirija.
return ( new ActionForward( url,true ) );


2.-Función que me da la nueva dir a la que quiero ir

private String miRequestNueva(String uri){
String miRequestPath=uri;
//tomo la url y lo que hay luego de la última barra lo voy a cambiar
int ultimoIndexBarra= miRequestPath.lastIndexOf("/");
String primeraParte=miRequestPath.substring(0,ultimoIndexBarra+1);
//esto va a ser el final de mi request, cambio el action y paso un parámetro
String segundaParte="NuevaAction?paginate=true;
String requestCompuesta=primeraParte+segundaParte;
return requestCompuesta;
}