miércoles, diciembre 10, 2008

Postprocesado con interceptors en struts2

Introducción:
En struts 2 cada acción al ser procesada pasa por una cadena de procesado. En esta cadena se ejecutan una serie de interceptors, posteriormente la acción (si ningun interceptor interrumpe la cadena) y de nuevo los interceptors en orden inverso.
Para quien le suene algo, esto actua como un patron cadena de responsabilidades (Chain of Responsibility)

Situación:
Tenemos un action de nuestra aplicación que despues de ejecutarse y dependiendo de una elección del usuario, ha de comportarse de forma diferente (incluso modificar su result-type).

Posible solución:

  • Creamos un interceptor que se colocará en la interceptors stack en ultimo lugar (de tal manera que se ejecute el ultimo en preprocesado y el primero en postprocesado)
  • Este interceptor en lugar de llamar al metodo invoke() de ActionInvocation, llamará directamente al método execute() de la acción a ejecutar, y si todo ha ido correctamente, hace el postprocesado que necesita hacer y devuelve el result que le corresponde.

Ejemplo:
Este interceptor permite que un action que mostraba por pantalla una lista de VOs, genere un fichero en excel y se lo envie al usuario si este así lo ha marcado:


package es.acore....;

import ...

/*
* This interceptor generates a excel file containing a list of VOs
*/

public class ExcelInterceptor implements Interceptor {

...

public String intercept( ActionInvocation actionInvocation )
throws Exception {

Action action = ( Action ) actionInvocation.getAction();

if (action instanceof ExcelAware) {
System.out.println("Logged in: ExcelInterceptor.java");
if ((((ExcelAware)action).getGenerarExcel() != null)
&& ((ExcelAware)action).getGenerarExcel()){

String result = action.execute();

if (result.equals(Action.ERROR))
return Action.ERROR;

List vos = ((ExcelAware)action).getListaVOs();

...

XlsTable generadorExcel = new XlsTable();
generadorExcel.addTableToSheet(vos,...);

ByteArrayOutputStream out =
new ByteArrayOutputStream();
wb.write(out);
InputStream inputStream =
new ByteArrayInputStream(out.toByteArray());

((ExcelAware)action).setInputStream(inputStream);
return COINConstants.EXCELRESULTCODE;//"excel"
}
}
//if there is nothing to do with excel
//we continue de execution stack as usuall
return actionInvocation.invoke();
}
}

miércoles, octubre 29, 2008

Autocompleter y struts2

Esta vez una receta rápida y una pregunta a la comunidad:

Para cambiar el aspecto de un desplegable "autocompleter" de struts2, en las css que se hayan definido para la aplicacion web que se esté haciendo hay que utilizar la class .dojoComboBoxOptions

En concreto si se quiere poner la letra a tamaño 11, se pondría:


.dojoComboBoxOptions {
    font-size: 11px;
}

Ahora la pregunta:
¿Como hacer para que aparezca un valor por defecto en un autocompleter de struts2?

domingo, septiembre 21, 2008

vandalismo

Cuando era (mas) joven, no entendia que a nadie se le pudiese aplicar el adjetivo de misantropo. No entendia como nadie podia tener odio a la humanidad.

Sin embargo tengo un amigo que es un misantropo reconocido. El no profesa un odio a la humanidad en si, si no que detesta la sociedad en la que vivimos.

El lo explica, y tiene argumentos mas que validos, aunque tambien se pueden encontrar argumentos en contra de sus opiniones y estos eran los mios hasta ahora.
Sin embargo hoy al llegar a casa, acabo de encontrarme con que el pequeño arbol que hay en la acera esta serrado por la mitad, y la copa del arbol tirada sobre los contenedores. Alguien ha decidido que un ser vivo que llevaba mas de 15 años luchando por vivir, habia que matarlo por diversion. Su madera no va a servir de nada, seguramente se secara ahi, y quien lo ha hecho ni siquiera vuelva a pasar por delante. Eso por no hablar del esfuerzo de quien lo ha plantado y podado durante 5 años, y de el dinero que nos ha costado a todos.

Y todo esto sin ninguna razon de ser, no es una cueston de ideologia, ni de moral, ni el individuo ha ganado nada con ello; es ineptiud y maldad humana en estado puro.

Todo esto me ha hecho reflexionar y si, creo que la sociedad actual es demasiado permisiva con estas cosas. Si creo que el castigo a algo como esto deberia ser ejemplar, y si creo que a este tipo de gente deberia de expulsarsele de la sociedad.

Creo que voy a empezar a ser un poco mas radical e intransijente, y es una pena...

(Perdon por los tildes y erratas, pero esto escribiendo esto desde la DS.)